adcp 3.1.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 (242) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +5 -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 +10 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/base.py +7 -7
  19. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  20. adcp/types/generated_poc/a2ui/component.py +24 -0
  21. adcp/types/generated_poc/a2ui/surface.py +33 -0
  22. adcp/types/generated_poc/account/__init__.py +3 -0
  23. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  24. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  25. adcp/types/generated_poc/adagents.py +192 -195
  26. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  27. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  28. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  29. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  30. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  31. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  32. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  33. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  34. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  35. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  37. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  38. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  39. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  40. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  41. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  43. adcp/types/generated_poc/core/account.py +54 -0
  44. adcp/types/generated_poc/core/activation_key.py +8 -8
  45. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  46. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  47. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  48. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  49. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  50. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  51. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  52. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  53. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  54. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  55. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  56. adcp/types/generated_poc/core/async_response_data.py +2 -2
  57. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  58. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  59. adcp/types/generated_poc/core/context.py +1 -1
  60. adcp/types/generated_poc/core/creative_asset.py +12 -12
  61. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  62. adcp/types/generated_poc/core/creative_filters.py +23 -17
  63. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  64. adcp/types/generated_poc/core/creative_policy.py +4 -4
  65. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  66. adcp/types/generated_poc/core/deployment.py +20 -20
  67. adcp/types/generated_poc/core/destination.py +11 -11
  68. adcp/types/generated_poc/core/error.py +6 -6
  69. adcp/types/generated_poc/core/ext.py +1 -1
  70. adcp/types/generated_poc/core/format.py +49 -124
  71. adcp/types/generated_poc/core/format_id.py +5 -5
  72. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  73. adcp/types/generated_poc/core/identifier.py +2 -2
  74. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  75. adcp/types/generated_poc/core/measurement.py +8 -8
  76. adcp/types/generated_poc/core/media_buy.py +12 -8
  77. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  78. adcp/types/generated_poc/core/offering.py +9 -9
  79. adcp/types/generated_poc/core/package.py +8 -8
  80. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  81. adcp/types/generated_poc/core/placement.py +4 -4
  82. adcp/types/generated_poc/core/pricing_option.py +1 -1
  83. adcp/types/generated_poc/core/product.py +27 -21
  84. adcp/types/generated_poc/core/product_allocation.py +5 -5
  85. adcp/types/generated_poc/core/product_filters.py +27 -27
  86. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  87. adcp/types/generated_poc/core/promoted_products.py +2 -2
  88. adcp/types/generated_poc/core/property.py +10 -10
  89. adcp/types/generated_poc/core/property_id.py +4 -4
  90. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  91. adcp/types/generated_poc/core/property_tag.py +4 -4
  92. adcp/types/generated_poc/core/proposal.py +13 -13
  93. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  94. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  95. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  96. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  97. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  98. adcp/types/generated_poc/core/response.py +4 -4
  99. adcp/types/generated_poc/core/signal_filters.py +5 -5
  100. adcp/types/generated_poc/core/start_timing.py +3 -3
  101. adcp/types/generated_poc/core/sub_asset.py +14 -14
  102. adcp/types/generated_poc/core/targeting.py +17 -10
  103. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  104. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  105. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  106. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  107. adcp/types/generated_poc/creative/preview_render.py +25 -25
  108. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  109. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  110. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  111. adcp/types/generated_poc/enums/available_metric.py +9 -9
  112. adcp/types/generated_poc/enums/channels.py +19 -19
  113. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  114. adcp/types/generated_poc/enums/creative_action.py +5 -5
  115. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  116. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  117. adcp/types/generated_poc/enums/creative_status.py +5 -5
  118. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  119. adcp/types/generated_poc/enums/daast_version.py +2 -2
  120. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  121. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  122. adcp/types/generated_poc/enums/feed_format.py +3 -3
  123. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  124. adcp/types/generated_poc/enums/format_category.py +7 -7
  125. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  126. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  127. adcp/types/generated_poc/enums/geo_level.py +4 -4
  128. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  129. adcp/types/generated_poc/enums/http_method.py +2 -2
  130. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  131. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  132. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  133. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  134. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  135. adcp/types/generated_poc/enums/metric_type.py +8 -8
  136. adcp/types/generated_poc/enums/metro_system.py +5 -5
  137. adcp/types/generated_poc/enums/notification_type.py +4 -4
  138. adcp/types/generated_poc/enums/pacing.py +3 -3
  139. adcp/types/generated_poc/enums/postal_system.py +9 -9
  140. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  141. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  142. adcp/types/generated_poc/enums/property_type.py +8 -8
  143. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  144. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  145. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  146. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  147. adcp/types/generated_poc/enums/task_status.py +9 -9
  148. adcp/types/generated_poc/enums/task_type.py +11 -12
  149. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  150. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  151. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  152. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  153. adcp/types/generated_poc/enums/vast_version.py +5 -5
  154. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  155. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  156. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  157. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  158. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  159. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  162. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  163. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  164. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  166. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  167. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  168. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  169. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  170. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  171. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  172. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  173. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  174. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  175. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  176. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  182. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  183. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  187. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  188. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  189. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  190. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  192. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  193. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  195. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  196. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  197. adcp/types/generated_poc/property/base_property_source.py +15 -15
  198. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  199. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  200. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  201. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  202. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  203. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  204. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  205. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  206. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  207. adcp/types/generated_poc/property/property_error.py +10 -10
  208. adcp/types/generated_poc/property/property_feature.py +4 -4
  209. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  210. adcp/types/generated_poc/property/property_list.py +11 -11
  211. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  212. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  213. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  214. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  217. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  218. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  219. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  220. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  232. adcp/utils/format_assets.py +32 -32
  233. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  234. adcp-3.2.0.dist-info/RECORD +268 -0
  235. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  237. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  238. adcp-3.1.0.dist-info/RECORD +0 -264
  239. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  240. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  241. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  242. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
@@ -1,26 +1,55 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: core/assets/audio_asset.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
 
7
+ from enum import Enum, IntEnum
7
8
  from typing import Annotated
8
9
 
9
10
  from adcp.types.base import AdCPBaseModel
10
11
  from pydantic import AnyUrl, ConfigDict, Field
11
12
 
12
13
 
14
+ class BitDepth(IntEnum):
15
+ integer_16 = 16
16
+ integer_24 = 24
17
+ integer_32 = 32
18
+
19
+
20
+ class Channels(Enum):
21
+ mono = "mono"
22
+ stereo = "stereo"
23
+ field_5_1 = "5.1"
24
+ field_7_1 = "7.1"
25
+
26
+
13
27
  class AudioAsset(AdCPBaseModel):
14
28
  model_config = ConfigDict(
15
- extra='allow',
29
+ extra="allow",
16
30
  )
31
+ bit_depth: Annotated[BitDepth | None, Field(description="Bit depth")] = None
17
32
  bitrate_kbps: Annotated[
18
- int | None, Field(description='Audio bitrate in kilobits per second', ge=1)
33
+ int | None, Field(description="Bitrate in kilobits per second", ge=1)
34
+ ] = None
35
+ channels: Annotated[Channels | None, Field(description="Channel configuration")] = None
36
+ codec: Annotated[
37
+ str | None,
38
+ Field(
39
+ description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, vorbis, opus, flac, ac3, eac3, etc.)"
40
+ ),
41
+ ] = None
42
+ container_format: Annotated[
43
+ str | None,
44
+ Field(description="Audio container/file format (mp3, m4a, aac, wav, ogg, flac, etc.)"),
19
45
  ] = None
20
46
  duration_ms: Annotated[
21
- int | None, Field(description='Audio duration in milliseconds', ge=0)
47
+ int | None, Field(description="Audio duration in milliseconds", ge=0)
22
48
  ] = None
23
- format: Annotated[str | None, Field(description='Audio file format (mp3, wav, aac, etc.)')] = (
24
- None
25
- )
26
- url: Annotated[AnyUrl, Field(description='URL to the audio asset')]
49
+ file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None
50
+ loudness_lufs: Annotated[float | None, Field(description="Integrated loudness in LUFS")] = None
51
+ sampling_rate_hz: Annotated[
52
+ int | None, Field(description="Sampling rate in Hz (e.g., 44100, 48000, 96000)")
53
+ ] = None
54
+ true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = None
55
+ url: Annotated[AnyUrl, Field(description="URL to the audio asset")]
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class CssAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- content: Annotated[str, Field(description='CSS content')]
17
+ content: Annotated[str, Field(description="CSS content")]
18
18
  media: Annotated[
19
19
  str | None, Field(description="CSS media query context (e.g., 'screen', 'print')")
20
20
  ] = None
@@ -15,49 +15,49 @@ from ...enums import daast_version as daast_version_1
15
15
 
16
16
  class DaastAsset1(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
20
  companion_ads: Annotated[
21
- bool | None, Field(description='Whether companion display ads are included')
21
+ bool | None, Field(description="Whether companion display ads are included")
22
22
  ] = None
23
23
  daast_version: Annotated[
24
- daast_version_1.DaastVersion | None, Field(description='DAAST specification version')
24
+ daast_version_1.DaastVersion | None, Field(description="DAAST specification version")
25
25
  ] = None
26
26
  delivery_type: Annotated[
27
- Literal['url'],
28
- Field(description='Discriminator indicating DAAST is delivered via URL endpoint'),
27
+ Literal["url"],
28
+ Field(description="Discriminator indicating DAAST is delivered via URL endpoint"),
29
29
  ]
30
30
  duration_ms: Annotated[
31
- int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0)
31
+ int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0)
32
32
  ] = None
33
33
  tracking_events: Annotated[
34
34
  list[daast_tracking_event.DaastTrackingEvent] | None,
35
- Field(description='Tracking events supported by this DAAST tag'),
35
+ Field(description="Tracking events supported by this DAAST tag"),
36
36
  ] = None
37
- url: Annotated[AnyUrl, Field(description='URL endpoint that returns DAAST XML')]
37
+ url: Annotated[AnyUrl, Field(description="URL endpoint that returns DAAST XML")]
38
38
 
39
39
 
40
40
  class DaastAsset2(AdCPBaseModel):
41
41
  model_config = ConfigDict(
42
- extra='allow',
42
+ extra="allow",
43
43
  )
44
44
  companion_ads: Annotated[
45
- bool | None, Field(description='Whether companion display ads are included')
45
+ bool | None, Field(description="Whether companion display ads are included")
46
46
  ] = None
47
- content: Annotated[str, Field(description='Inline DAAST XML content')]
47
+ content: Annotated[str, Field(description="Inline DAAST XML content")]
48
48
  daast_version: Annotated[
49
- daast_version_1.DaastVersion | None, Field(description='DAAST specification version')
49
+ daast_version_1.DaastVersion | None, Field(description="DAAST specification version")
50
50
  ] = None
51
51
  delivery_type: Annotated[
52
- Literal['inline'],
53
- Field(description='Discriminator indicating DAAST is delivered as inline XML content'),
52
+ Literal["inline"],
53
+ Field(description="Discriminator indicating DAAST is delivered as inline XML content"),
54
54
  ]
55
55
  duration_ms: Annotated[
56
- int | None, Field(description='Expected audio duration in milliseconds (if known)', ge=0)
56
+ int | None, Field(description="Expected audio duration in milliseconds (if known)", ge=0)
57
57
  ] = None
58
58
  tracking_events: Annotated[
59
59
  list[daast_tracking_event.DaastTrackingEvent] | None,
60
- Field(description='Tracking events supported by this DAAST tag'),
60
+ Field(description="Tracking events supported by this DAAST tag"),
61
61
  ] = None
62
62
 
63
63
 
@@ -65,7 +65,7 @@ class DaastAsset(RootModel[DaastAsset1 | DaastAsset2]):
65
65
  root: Annotated[
66
66
  DaastAsset1 | DaastAsset2,
67
67
  Field(
68
- description='DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving',
69
- title='DAAST Asset',
68
+ description="DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving",
69
+ title="DAAST Asset",
70
70
  ),
71
71
  ]
@@ -12,7 +12,7 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class HtmlAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- content: Annotated[str, Field(description='HTML content')]
17
+ content: Annotated[str, Field(description="HTML content")]
18
18
  version: Annotated[str | None, Field(description="HTML version (e.g., 'HTML5')")] = None
@@ -12,12 +12,12 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class ImageAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- alt_text: Annotated[str | None, Field(description='Alternative text for accessibility')] = None
17
+ alt_text: Annotated[str | None, Field(description="Alternative text for accessibility")] = None
18
18
  format: Annotated[
19
- str | None, Field(description='Image file format (jpg, png, gif, webp, etc.)')
19
+ str | None, Field(description="Image file format (jpg, png, gif, webp, etc.)")
20
20
  ] = None
21
- height: Annotated[int, Field(description='Height in pixels', ge=1)]
22
- url: Annotated[AnyUrl, Field(description='URL to the image asset')]
23
- width: Annotated[int, Field(description='Width in pixels', ge=1)]
21
+ height: Annotated[int, Field(description="Height in pixels", ge=1)]
22
+ url: Annotated[AnyUrl, Field(description="URL to the image asset")]
23
+ width: Annotated[int, Field(description="Width in pixels", ge=1)]
@@ -14,10 +14,10 @@ from ...enums import javascript_module_type
14
14
 
15
15
  class JavascriptAsset(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
- content: Annotated[str, Field(description='JavaScript content')]
19
+ content: Annotated[str, Field(description="JavaScript content")]
20
20
  module_type: Annotated[
21
21
  javascript_module_type.JavascriptModuleType | None,
22
- Field(description='JavaScript module type'),
22
+ Field(description="JavaScript module type"),
23
23
  ] = None
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class TextAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- content: Annotated[str, Field(description='Text content')]
17
+ content: Annotated[str, Field(description="Text content")]
18
18
  language: Annotated[str | None, Field(description="Language code (e.g., 'en', 'es', 'fr')")] = (
19
19
  None
20
20
  )
@@ -14,12 +14,12 @@ from ...enums import url_asset_type
14
14
 
15
15
  class UrlAsset(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
19
  description: Annotated[
20
- str | None, Field(description='Description of what this URL points to')
20
+ str | None, Field(description="Description of what this URL points to")
21
21
  ] = None
22
- url: Annotated[AnyUrl, Field(description='URL reference')]
22
+ url: Annotated[AnyUrl, Field(description="URL reference")]
23
23
  url_type: Annotated[
24
24
  url_asset_type.UrlAssetType | None,
25
25
  Field(
@@ -15,51 +15,51 @@ from ...enums import vast_version as vast_version_1
15
15
 
16
16
  class VastAsset1(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
20
  delivery_type: Annotated[
21
- Literal['url'],
22
- Field(description='Discriminator indicating VAST is delivered via URL endpoint'),
21
+ Literal["url"],
22
+ Field(description="Discriminator indicating VAST is delivered via URL endpoint"),
23
23
  ]
24
24
  duration_ms: Annotated[
25
- int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
25
+ int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
26
26
  ] = None
27
27
  tracking_events: Annotated[
28
28
  list[vast_tracking_event.VastTrackingEvent] | None,
29
- Field(description='Tracking events supported by this VAST tag'),
29
+ Field(description="Tracking events supported by this VAST tag"),
30
30
  ] = None
31
- url: Annotated[AnyUrl, Field(description='URL endpoint that returns VAST XML')]
31
+ url: Annotated[AnyUrl, Field(description="URL endpoint that returns VAST XML")]
32
32
  vast_version: Annotated[
33
- vast_version_1.VastVersion | None, Field(description='VAST specification version')
33
+ vast_version_1.VastVersion | None, Field(description="VAST specification version")
34
34
  ] = None
35
35
  vpaid_enabled: Annotated[
36
36
  bool | None,
37
- Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
37
+ Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
38
38
  ] = None
39
39
 
40
40
 
41
41
  class VastAsset2(AdCPBaseModel):
42
42
  model_config = ConfigDict(
43
- extra='allow',
43
+ extra="allow",
44
44
  )
45
- content: Annotated[str, Field(description='Inline VAST XML content')]
45
+ content: Annotated[str, Field(description="Inline VAST XML content")]
46
46
  delivery_type: Annotated[
47
- Literal['inline'],
48
- Field(description='Discriminator indicating VAST is delivered as inline XML content'),
47
+ Literal["inline"],
48
+ Field(description="Discriminator indicating VAST is delivered as inline XML content"),
49
49
  ]
50
50
  duration_ms: Annotated[
51
- int | None, Field(description='Expected video duration in milliseconds (if known)', ge=0)
51
+ int | None, Field(description="Expected video duration in milliseconds (if known)", ge=0)
52
52
  ] = None
53
53
  tracking_events: Annotated[
54
54
  list[vast_tracking_event.VastTrackingEvent] | None,
55
- Field(description='Tracking events supported by this VAST tag'),
55
+ Field(description="Tracking events supported by this VAST tag"),
56
56
  ] = None
57
57
  vast_version: Annotated[
58
- vast_version_1.VastVersion | None, Field(description='VAST specification version')
58
+ vast_version_1.VastVersion | None, Field(description="VAST specification version")
59
59
  ] = None
60
60
  vpaid_enabled: Annotated[
61
61
  bool | None,
62
- Field(description='Whether VPAID (Video Player-Ad Interface Definition) is supported'),
62
+ Field(description="Whether VPAID (Video Player-Ad Interface Definition) is supported"),
63
63
  ] = None
64
64
 
65
65
 
@@ -67,7 +67,7 @@ class VastAsset(RootModel[VastAsset1 | VastAsset2]):
67
67
  root: Annotated[
68
68
  VastAsset1 | VastAsset2,
69
69
  Field(
70
- description='VAST (Video Ad Serving Template) tag for third-party video ad serving',
71
- title='VAST Asset',
70
+ description="VAST (Video Ad Serving Template) tag for third-party video ad serving",
71
+ title="VAST Asset",
72
72
  ),
73
73
  ]
@@ -1,28 +1,144 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: core/assets/video_asset.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
 
7
+ from enum import Enum, IntEnum
7
8
  from typing import Annotated
8
9
 
9
10
  from adcp.types.base import AdCPBaseModel
10
11
  from pydantic import AnyUrl, ConfigDict, Field
11
12
 
12
13
 
14
+ class AudioBitDepth(IntEnum):
15
+ integer_16 = 16
16
+ integer_24 = 24
17
+ integer_32 = 32
18
+
19
+
20
+ class AudioChannels(Enum):
21
+ mono = "mono"
22
+ stereo = "stereo"
23
+ field_5_1 = "5.1"
24
+ field_7_1 = "7.1"
25
+
26
+
27
+ class ChromaSubsampling(Enum):
28
+ field_4_2_0 = "4:2:0"
29
+ field_4_2_2 = "4:2:2"
30
+ field_4_4_4 = "4:4:4"
31
+
32
+
33
+ class ColorSpace(Enum):
34
+ rec709 = "rec709"
35
+ rec2020 = "rec2020"
36
+ rec2100 = "rec2100"
37
+ srgb = "srgb"
38
+ dci_p3 = "dci_p3"
39
+
40
+
41
+ class FrameRateType(Enum):
42
+ constant = "constant"
43
+ variable = "variable"
44
+
45
+
46
+ class GopType(Enum):
47
+ closed = "closed"
48
+ open = "open"
49
+
50
+
51
+ class HdrFormat(Enum):
52
+ sdr = "sdr"
53
+ hdr10 = "hdr10"
54
+ hdr10_plus = "hdr10_plus"
55
+ hlg = "hlg"
56
+ dolby_vision = "dolby_vision"
57
+
58
+
59
+ class MoovAtomPosition(Enum):
60
+ start = "start"
61
+ end = "end"
62
+
63
+
64
+ class ScanType(Enum):
65
+ progressive = "progressive"
66
+ interlaced = "interlaced"
67
+
68
+
69
+ class VideoBitDepth(IntEnum):
70
+ integer_8 = 8
71
+ integer_10 = 10
72
+ integer_12 = 12
73
+
74
+
13
75
  class VideoAsset(AdCPBaseModel):
14
76
  model_config = ConfigDict(
15
- extra='allow',
77
+ extra="allow",
16
78
  )
17
- bitrate_kbps: Annotated[
18
- int | None, Field(description='Video bitrate in kilobits per second', ge=1)
79
+ audio_bit_depth: Annotated[AudioBitDepth | None, Field(description="Audio bit depth")] = None
80
+ audio_bitrate_kbps: Annotated[
81
+ int | None, Field(description="Audio bitrate in kilobits per second", ge=1)
19
82
  ] = None
20
- duration_ms: Annotated[
21
- int | None, Field(description='Video duration in milliseconds', ge=1)
83
+ audio_channels: Annotated[
84
+ AudioChannels | None, Field(description="Audio channel configuration")
85
+ ] = None
86
+ audio_codec: Annotated[
87
+ str | None,
88
+ Field(description="Audio codec used (aac, aac_lc, he_aac, pcm, mp3, ac3, eac3, etc.)"),
89
+ ] = None
90
+ audio_loudness_lufs: Annotated[
91
+ float | None, Field(description="Integrated loudness in LUFS")
22
92
  ] = None
23
- format: Annotated[str | None, Field(description='Video file format (mp4, webm, mov, etc.)')] = (
93
+ audio_sampling_rate_hz: Annotated[
94
+ int | None, Field(description="Audio sampling rate in Hz (e.g., 44100, 48000)")
95
+ ] = None
96
+ audio_true_peak_dbfs: Annotated[float | None, Field(description="True peak level in dBFS")] = (
24
97
  None
25
98
  )
26
- height: Annotated[int, Field(description='Height in pixels', ge=1)]
27
- url: Annotated[AnyUrl, Field(description='URL to the video asset')]
28
- width: Annotated[int, Field(description='Width in pixels', ge=1)]
99
+ chroma_subsampling: Annotated[
100
+ ChromaSubsampling | None, Field(description="Chroma subsampling format")
101
+ ] = None
102
+ color_space: Annotated[ColorSpace | None, Field(description="Color space of the video")] = None
103
+ container_format: Annotated[
104
+ str | None, Field(description="Video container format (mp4, webm, mov, etc.)")
105
+ ] = None
106
+ duration_ms: Annotated[
107
+ int | None, Field(description="Video duration in milliseconds", ge=1)
108
+ ] = None
109
+ file_size_bytes: Annotated[int | None, Field(description="File size in bytes", ge=1)] = None
110
+ frame_rate: Annotated[
111
+ str | None,
112
+ Field(
113
+ description="Frame rate as string to preserve precision (e.g., '23.976', '29.97', '30')"
114
+ ),
115
+ ] = None
116
+ frame_rate_type: Annotated[
117
+ FrameRateType | None,
118
+ Field(description="Whether the video uses constant (CFR) or variable (VFR) frame rate"),
119
+ ] = None
120
+ gop_interval_seconds: Annotated[
121
+ float | None, Field(description="GOP/keyframe interval in seconds")
122
+ ] = None
123
+ gop_type: Annotated[GopType | None, Field(description="GOP structure type")] = None
124
+ has_audio: Annotated[
125
+ bool | None, Field(description="Whether the video contains an audio track")
126
+ ] = None
127
+ hdr_format: Annotated[
128
+ HdrFormat | None,
129
+ Field(description="HDR format if applicable, or 'sdr' for standard dynamic range"),
130
+ ] = None
131
+ height: Annotated[int, Field(description="Height in pixels", ge=1)]
132
+ moov_atom_position: Annotated[
133
+ MoovAtomPosition | None, Field(description="Position of moov atom in MP4 container")
134
+ ] = None
135
+ scan_type: Annotated[ScanType | None, Field(description="Scan type of the video")] = None
136
+ url: Annotated[AnyUrl, Field(description="URL to the video asset")]
137
+ video_bit_depth: Annotated[VideoBitDepth | None, Field(description="Video bit depth")] = None
138
+ video_bitrate_kbps: Annotated[
139
+ int | None, Field(description="Video stream bitrate in kilobits per second", ge=1)
140
+ ] = None
141
+ video_codec: Annotated[
142
+ str | None, Field(description="Video codec used (h264, h265, vp9, av1, prores, etc.)")
143
+ ] = None
144
+ width: Annotated[int, Field(description="Width in pixels", ge=1)]
@@ -20,34 +20,34 @@ class Security(AdCPBaseModel):
20
20
  str | None, Field(description="Header name for HMAC signature (e.g., 'X-Signature')")
21
21
  ] = None
22
22
  method: Annotated[
23
- webhook_security_method.WebhookSecurityMethod, Field(description='Authentication method')
23
+ webhook_security_method.WebhookSecurityMethod, Field(description="Authentication method")
24
24
  ]
25
25
 
26
26
 
27
27
  class WebhookAsset(AdCPBaseModel):
28
28
  model_config = ConfigDict(
29
- extra='allow',
29
+ extra="allow",
30
30
  )
31
- method: Annotated[http_method.HttpMethod | None, Field(description='HTTP method')] = (
31
+ method: Annotated[http_method.HttpMethod | None, Field(description="HTTP method")] = (
32
32
  http_method.HttpMethod.POST
33
33
  )
34
34
  required_macros: Annotated[
35
35
  list[str] | None,
36
- Field(description='Universal macros that must be provided for webhook to function'),
36
+ Field(description="Universal macros that must be provided for webhook to function"),
37
37
  ] = None
38
38
  response_type: Annotated[
39
39
  webhook_response_type.WebhookResponseType,
40
- Field(description='Expected content type of webhook response'),
40
+ Field(description="Expected content type of webhook response"),
41
41
  ]
42
- security: Annotated[Security, Field(description='Security configuration for webhook calls')]
42
+ security: Annotated[Security, Field(description="Security configuration for webhook calls")]
43
43
  supported_macros: Annotated[
44
44
  list[str] | None,
45
45
  Field(
46
- description='Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})'
46
+ description="Universal macros that can be passed to webhook (e.g., {DEVICE_TYPE}, {COUNTRY})"
47
47
  ),
48
48
  ] = None
49
49
  timeout_ms: Annotated[
50
50
  int | None,
51
- Field(description='Maximum time to wait for response in milliseconds', ge=10, le=5000),
51
+ Field(description="Maximum time to wait for response in milliseconds", ge=10, le=5000),
52
52
  ] = 500
53
- url: Annotated[AnyUrl, Field(description='Webhook URL to call for dynamic content')]
53
+ url: Annotated[AnyUrl, Field(description="Webhook URL to call for dynamic content")]
@@ -66,7 +66,7 @@ class AdcpAsyncResponseData(
66
66
  | sync_creatives_async_response_input_required.SyncCreativesInputRequired
67
67
  | sync_creatives_async_response_submitted.SyncCreativesSubmitted,
68
68
  Field(
69
- description='Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.',
70
- title='AdCP Async Response Data',
69
+ description="Union of all possible data payloads for async task webhook responses. For completed/failed statuses, use the main task response schema. For working/input-required/submitted, use the status-specific schemas.",
70
+ title="AdCP Async Response Data",
71
71
  ),
72
72
  ]