adcp 2.18.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 (187) hide show
  1. adcp/__init__.py +1 -1
  2. adcp/protocols/mcp.py +3 -1
  3. adcp/types/_ergonomic.py +0 -4
  4. adcp/types/_generated.py +85 -4
  5. adcp/types/generated_poc/adagents.py +239 -149
  6. adcp/types/generated_poc/core/activation_key.py +8 -8
  7. adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
  8. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  9. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  10. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  11. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  12. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  13. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  14. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  15. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  16. adcp/types/generated_poc/core/assets/video_asset.py +7 -7
  17. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  18. adcp/types/generated_poc/core/async_response_data.py +2 -2
  19. adcp/types/generated_poc/core/brand_manifest.py +55 -55
  20. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  21. adcp/types/generated_poc/core/context.py +1 -1
  22. adcp/types/generated_poc/core/creative_asset.py +13 -13
  23. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  24. adcp/types/generated_poc/core/creative_filters.py +19 -19
  25. adcp/types/generated_poc/core/creative_manifest.py +2 -2
  26. adcp/types/generated_poc/core/creative_policy.py +4 -4
  27. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  28. adcp/types/generated_poc/core/deployment.py +20 -20
  29. adcp/types/generated_poc/core/destination.py +11 -11
  30. adcp/types/generated_poc/core/error.py +6 -6
  31. adcp/types/generated_poc/core/ext.py +1 -1
  32. adcp/types/generated_poc/core/format.py +67 -66
  33. adcp/types/generated_poc/core/format_id.py +5 -5
  34. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  35. adcp/types/generated_poc/core/identifier.py +27 -0
  36. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  37. adcp/types/generated_poc/core/measurement.py +8 -8
  38. adcp/types/generated_poc/core/media_buy.py +7 -7
  39. adcp/types/generated_poc/core/package.py +8 -8
  40. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  41. adcp/types/generated_poc/core/placement.py +4 -4
  42. adcp/types/generated_poc/core/pricing_option.py +2 -2
  43. adcp/types/generated_poc/core/product.py +20 -20
  44. adcp/types/generated_poc/core/product_filters.py +18 -18
  45. adcp/types/generated_poc/core/promoted_offerings.py +20 -20
  46. adcp/types/generated_poc/core/promoted_products.py +2 -2
  47. adcp/types/generated_poc/core/property.py +9 -9
  48. adcp/types/generated_poc/core/property_id.py +4 -4
  49. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  50. adcp/types/generated_poc/core/property_tag.py +4 -4
  51. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  52. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  53. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  54. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  55. adcp/types/generated_poc/core/response.py +4 -4
  56. adcp/types/generated_poc/core/signal_filters.py +5 -5
  57. adcp/types/generated_poc/core/start_timing.py +5 -5
  58. adcp/types/generated_poc/core/sub_asset.py +14 -14
  59. adcp/types/generated_poc/core/targeting.py +8 -8
  60. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  61. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  62. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  63. adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
  64. adcp/types/generated_poc/creative/preview_render.py +25 -25
  65. adcp/types/generated_poc/enums/adcp_domain.py +5 -3
  66. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  67. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  68. adcp/types/generated_poc/enums/available_metric.py +9 -9
  69. adcp/types/generated_poc/enums/channels.py +9 -9
  70. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  71. adcp/types/generated_poc/enums/creative_action.py +5 -5
  72. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  73. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  74. adcp/types/generated_poc/enums/creative_status.py +4 -4
  75. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  76. adcp/types/generated_poc/enums/daast_version.py +2 -2
  77. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  78. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  79. adcp/types/generated_poc/enums/feed_format.py +3 -3
  80. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  81. adcp/types/generated_poc/enums/format_category.py +7 -7
  82. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  83. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  84. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  85. adcp/types/generated_poc/enums/http_method.py +2 -2
  86. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  87. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  88. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  89. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  90. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  91. adcp/types/generated_poc/enums/metric_type.py +8 -8
  92. adcp/types/generated_poc/enums/notification_type.py +4 -4
  93. adcp/types/generated_poc/enums/pacing.py +3 -3
  94. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  95. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  96. adcp/types/generated_poc/enums/property_type.py +7 -7
  97. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  98. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  99. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  100. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  101. adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
  102. adcp/types/generated_poc/enums/task_status.py +9 -9
  103. adcp/types/generated_poc/enums/task_type.py +12 -6
  104. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  105. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  106. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  107. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  108. adcp/types/generated_poc/enums/vast_version.py +5 -5
  109. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  110. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  111. adcp/types/generated_poc/extensions/__init__.py +3 -0
  112. adcp/types/generated_poc/extensions/extension_meta.py +50 -0
  113. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  114. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  115. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  116. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  117. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  118. adcp/types/generated_poc/media_buy/create_media_buy_request.py +25 -25
  119. adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
  120. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  121. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  122. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  123. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  124. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  125. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  126. adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
  127. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
  128. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
  129. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  130. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  131. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  132. adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
  133. adcp/types/generated_poc/media_buy/package_request.py +16 -7
  134. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  135. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  136. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  137. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  138. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  139. adcp/types/generated_poc/media_buy/sync_creatives_request.py +7 -7
  140. adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
  141. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  142. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  143. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  144. adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
  145. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  146. adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
  147. adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
  148. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
  149. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
  150. adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
  151. adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
  152. adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
  153. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
  154. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
  155. adcp/types/generated_poc/property/__init__.py +3 -0
  156. adcp/types/generated_poc/property/base_property_source.py +86 -0
  157. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  158. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  159. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  160. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  161. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  162. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  163. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  164. adcp/types/generated_poc/property/list_property_features_request.py +25 -0
  165. adcp/types/generated_poc/property/list_property_features_response.py +24 -0
  166. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  167. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  168. adcp/types/generated_poc/property/property_error.py +33 -0
  169. adcp/types/generated_poc/property/property_feature.py +22 -0
  170. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  171. adcp/types/generated_poc/property/property_list.py +62 -0
  172. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  173. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  174. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  175. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  176. adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
  177. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  178. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  179. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  180. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  181. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
  182. adcp-2.19.0.dist-info/RECORD +220 -0
  183. adcp-2.18.0.dist-info/RECORD +0 -195
  184. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
  185. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
  186. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
  187. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
@@ -12,22 +12,22 @@ from pydantic import ConfigDict, Field, RootModel
12
12
 
13
13
  class ActivationKey1(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  segment_id: Annotated[
18
18
  str,
19
- Field(description='The platform-specific segment identifier to use in campaign targeting'),
19
+ Field(description="The platform-specific segment identifier to use in campaign targeting"),
20
20
  ]
21
- type: Annotated[Literal['segment_id'], Field(description='Segment ID based targeting')]
21
+ type: Annotated[Literal["segment_id"], Field(description="Segment ID based targeting")]
22
22
 
23
23
 
24
24
  class ActivationKey2(AdCPBaseModel):
25
25
  model_config = ConfigDict(
26
- extra='allow',
26
+ extra="allow",
27
27
  )
28
- key: Annotated[str, Field(description='The targeting parameter key')]
29
- type: Annotated[Literal['key_value'], Field(description='Key-value pair based targeting')]
30
- value: Annotated[str, Field(description='The targeting parameter value')]
28
+ key: Annotated[str, Field(description="The targeting parameter key")]
29
+ type: Annotated[Literal["key_value"], Field(description="Key-value pair based targeting")]
30
+ value: Annotated[str, Field(description="The targeting parameter value")]
31
31
 
32
32
 
33
33
  class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
@@ -35,6 +35,6 @@ class ActivationKey(RootModel[ActivationKey1 | ActivationKey2]):
35
35
  ActivationKey1 | ActivationKey2,
36
36
  Field(
37
37
  description="Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.",
38
- title='Activation Key',
38
+ title="Activation Key",
39
39
  ),
40
40
  ]
@@ -12,15 +12,15 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class AudioAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  bitrate_kbps: Annotated[
18
- int | None, Field(description='Audio bitrate in kilobits per second', ge=1)
18
+ int | None, Field(description="Audio bitrate in kilobits per second", ge=1)
19
19
  ] = None
20
20
  duration_ms: Annotated[
21
- int | None, Field(description='Audio duration in milliseconds', ge=0)
21
+ int | None, Field(description="Audio duration in milliseconds", ge=0)
22
22
  ] = None
23
- format: Annotated[str | None, Field(description='Audio file format (mp3, wav, aac, etc.)')] = (
23
+ format: Annotated[str | None, Field(description="Audio file format (mp3, wav, aac, etc.)")] = (
24
24
  None
25
25
  )
26
- url: Annotated[AnyUrl, Field(description='URL to the audio asset')]
26
+ 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
  ]
@@ -12,17 +12,17 @@ from pydantic import AnyUrl, ConfigDict, Field
12
12
 
13
13
  class VideoAsset(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  bitrate_kbps: Annotated[
18
- int | None, Field(description='Video bitrate in kilobits per second', ge=1)
18
+ int | None, Field(description="Video bitrate in kilobits per second", ge=1)
19
19
  ] = None
20
20
  duration_ms: Annotated[
21
- int | None, Field(description='Video duration in milliseconds', ge=1)
21
+ int | None, Field(description="Video duration in milliseconds", ge=1)
22
22
  ] = None
23
- format: Annotated[str | None, Field(description='Video file format (mp4, webm, mov, etc.)')] = (
23
+ format: Annotated[str | None, Field(description="Video file format (mp4, webm, mov, etc.)")] = (
24
24
  None
25
25
  )
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)]
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)]
@@ -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
  ]
@@ -15,61 +15,61 @@ from ..enums import asset_content_type
15
15
 
16
16
  class Asset(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
- asset_id: Annotated[str, Field(description='Unique identifier for this asset')]
20
+ asset_id: Annotated[str, Field(description="Unique identifier for this asset")]
21
21
  asset_type: Annotated[
22
22
  asset_content_type.AssetContentType,
23
23
  Field(
24
- description='Type of asset. Note: Brand manifests typically contain basic media assets (image, video, audio, text). Code assets (html, javascript, css) and ad markup (vast, daast) are usually not part of brand asset libraries.'
24
+ description="Type of asset. Note: Brand manifests typically contain basic media assets (image, video, audio, text). Code assets (html, javascript, css) and ad markup (vast, daast) are usually not part of brand asset libraries."
25
25
  ),
26
26
  ]
27
- description: Annotated[str | None, Field(description='Asset description or usage notes')] = None
27
+ description: Annotated[str | None, Field(description="Asset description or usage notes")] = None
28
28
  duration_seconds: Annotated[
29
- float | None, Field(description='Video/audio duration in seconds')
29
+ float | None, Field(description="Video/audio duration in seconds")
30
30
  ] = None
31
- file_size_bytes: Annotated[int | None, Field(description='File size in bytes')] = None
31
+ file_size_bytes: Annotated[int | None, Field(description="File size in bytes")] = None
32
32
  format: Annotated[str | None, Field(description="File format (e.g., 'jpg', 'mp4', 'mp3')")] = (
33
33
  None
34
34
  )
35
- height: Annotated[int | None, Field(description='Image/video height in pixels')] = None
35
+ height: Annotated[int | None, Field(description="Image/video height in pixels")] = None
36
36
  metadata: Annotated[
37
- dict[str, Any] | None, Field(description='Additional asset-specific metadata')
37
+ dict[str, Any] | None, Field(description="Additional asset-specific metadata")
38
38
  ] = None
39
- name: Annotated[str | None, Field(description='Human-readable asset name')] = None
39
+ name: Annotated[str | None, Field(description="Human-readable asset name")] = None
40
40
  tags: Annotated[
41
41
  list[str] | None,
42
42
  Field(
43
43
  description="Tags for asset discovery (e.g., 'holiday', 'lifestyle', 'product_shot')"
44
44
  ),
45
45
  ] = None
46
- url: Annotated[AnyUrl, Field(description='URL to CDN-hosted asset file')]
47
- width: Annotated[int | None, Field(description='Image/video width in pixels')] = None
46
+ url: Annotated[AnyUrl, Field(description="URL to CDN-hosted asset file")]
47
+ width: Annotated[int | None, Field(description="Image/video width in pixels")] = None
48
48
 
49
49
 
50
50
  class Colors(AdCPBaseModel):
51
51
  accent: Annotated[
52
- str | None, Field(description='Accent color (hex format)', pattern='^#[0-9A-Fa-f]{6}$')
52
+ str | None, Field(description="Accent color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
53
53
  ] = None
54
54
  background: Annotated[
55
- str | None, Field(description='Background color (hex format)', pattern='^#[0-9A-Fa-f]{6}$')
55
+ str | None, Field(description="Background color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
56
56
  ] = None
57
57
  primary: Annotated[
58
58
  str | None,
59
- Field(description='Primary brand color (hex format)', pattern='^#[0-9A-Fa-f]{6}$'),
59
+ Field(description="Primary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"),
60
60
  ] = None
61
61
  secondary: Annotated[
62
62
  str | None,
63
- Field(description='Secondary brand color (hex format)', pattern='^#[0-9A-Fa-f]{6}$'),
63
+ Field(description="Secondary brand color (hex format)", pattern="^#[0-9A-Fa-f]{6}$"),
64
64
  ] = None
65
65
  text: Annotated[
66
- str | None, Field(description='Text color (hex format)', pattern='^#[0-9A-Fa-f]{6}$')
66
+ str | None, Field(description="Text color (hex format)", pattern="^#[0-9A-Fa-f]{6}$")
67
67
  ] = None
68
68
 
69
69
 
70
70
  class Contact(AdCPBaseModel):
71
- email: Annotated[EmailStr | None, Field(description='Contact email')] = None
72
- phone: Annotated[str | None, Field(description='Contact phone number')] = None
71
+ email: Annotated[EmailStr | None, Field(description="Contact email")] = None
72
+ phone: Annotated[str | None, Field(description="Contact phone number")] = None
73
73
 
74
74
 
75
75
  class Disclaimer(AdCPBaseModel):
@@ -79,92 +79,92 @@ class Disclaimer(AdCPBaseModel):
79
79
  description="When this disclaimer applies (e.g., 'financial_products', 'health_claims', 'all')"
80
80
  ),
81
81
  ] = None
82
- required: Annotated[bool | None, Field(description='Whether this disclaimer must appear')] = (
82
+ required: Annotated[bool | None, Field(description="Whether this disclaimer must appear")] = (
83
83
  True
84
84
  )
85
- text: Annotated[str, Field(description='Disclaimer text')]
85
+ text: Annotated[str, Field(description="Disclaimer text")]
86
86
 
87
87
 
88
88
  class Fonts(AdCPBaseModel):
89
89
  font_urls: Annotated[
90
- list[AnyUrl] | None, Field(description='URLs to web font files if using custom fonts')
90
+ list[AnyUrl] | None, Field(description="URLs to web font files if using custom fonts")
91
91
  ] = None
92
- primary: Annotated[str | None, Field(description='Primary font family name')] = None
93
- secondary: Annotated[str | None, Field(description='Secondary font family name')] = None
92
+ primary: Annotated[str | None, Field(description="Primary font family name")] = None
93
+ secondary: Annotated[str | None, Field(description="Secondary font family name")] = None
94
94
 
95
95
 
96
96
  class Logo(AdCPBaseModel):
97
- height: Annotated[int | None, Field(description='Logo height in pixels')] = None
97
+ height: Annotated[int | None, Field(description="Logo height in pixels")] = None
98
98
  tags: Annotated[
99
99
  list[str] | None,
100
100
  Field(
101
101
  description="Semantic tags describing the logo variant (e.g., 'dark', 'light', 'square', 'horizontal', 'icon')"
102
102
  ),
103
103
  ] = None
104
- url: Annotated[AnyUrl, Field(description='URL to the logo asset')]
105
- width: Annotated[int | None, Field(description='Logo width in pixels')] = None
104
+ url: Annotated[AnyUrl, Field(description="URL to the logo asset")]
105
+ width: Annotated[int | None, Field(description="Logo width in pixels")] = None
106
106
 
107
107
 
108
108
  class Metadata(AdCPBaseModel):
109
109
  created_date: Annotated[
110
- AwareDatetime | None, Field(description='When this brand manifest was created')
110
+ AwareDatetime | None, Field(description="When this brand manifest was created")
111
111
  ] = None
112
112
  updated_date: Annotated[
113
- AwareDatetime | None, Field(description='When this brand manifest was last updated')
113
+ AwareDatetime | None, Field(description="When this brand manifest was last updated")
114
114
  ] = None
115
- version: Annotated[str | None, Field(description='Brand card version number')] = None
115
+ version: Annotated[str | None, Field(description="Brand card version number")] = None
116
116
 
117
117
 
118
118
  class FeedFormat(Enum):
119
- google_merchant_center = 'google_merchant_center'
120
- facebook_catalog = 'facebook_catalog'
121
- custom = 'custom'
119
+ google_merchant_center = "google_merchant_center"
120
+ facebook_catalog = "facebook_catalog"
121
+ custom = "custom"
122
122
 
123
123
 
124
124
  class UpdateFrequency(Enum):
125
- realtime = 'realtime'
126
- hourly = 'hourly'
127
- daily = 'daily'
128
- weekly = 'weekly'
125
+ realtime = "realtime"
126
+ hourly = "hourly"
127
+ daily = "daily"
128
+ weekly = "weekly"
129
129
 
130
130
 
131
131
  class ProductCatalog(AdCPBaseModel):
132
132
  model_config = ConfigDict(
133
- extra='allow',
133
+ extra="allow",
134
134
  )
135
135
  categories: Annotated[
136
136
  list[str] | None,
137
- Field(description='Product categories available in the catalog (for filtering)'),
137
+ Field(description="Product categories available in the catalog (for filtering)"),
138
138
  ] = None
139
- feed_format: Annotated[FeedFormat | None, Field(description='Format of the product feed')] = (
139
+ feed_format: Annotated[FeedFormat | None, Field(description="Format of the product feed")] = (
140
140
  FeedFormat.google_merchant_center
141
141
  )
142
- feed_url: Annotated[AnyUrl, Field(description='URL to product catalog feed')]
142
+ feed_url: Annotated[AnyUrl, Field(description="URL to product catalog feed")]
143
143
  last_updated: Annotated[
144
- AwareDatetime | None, Field(description='When the product catalog was last updated')
144
+ AwareDatetime | None, Field(description="When the product catalog was last updated")
145
145
  ] = None
146
146
  update_frequency: Annotated[
147
- UpdateFrequency | None, Field(description='How frequently the product catalog is updated')
147
+ UpdateFrequency | None, Field(description="How frequently the product catalog is updated")
148
148
  ] = None
149
149
 
150
150
 
151
151
  class BrandManifest(AdCPBaseModel):
152
152
  model_config = ConfigDict(
153
- extra='allow',
153
+ extra="allow",
154
154
  )
155
155
  assets: Annotated[
156
156
  list[Asset] | None,
157
157
  Field(
158
- description='Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files.'
158
+ description="Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files."
159
159
  ),
160
160
  ] = None
161
- colors: Annotated[Colors | None, Field(description='Brand color palette')] = None
162
- contact: Annotated[Contact | None, Field(description='Brand contact information')] = None
161
+ colors: Annotated[Colors | None, Field(description="Brand color palette")] = None
162
+ contact: Annotated[Contact | None, Field(description="Brand contact information")] = None
163
163
  disclaimers: Annotated[
164
164
  list[Disclaimer] | None,
165
- Field(description='Legal disclaimers or required text that must appear in creatives'),
165
+ Field(description="Legal disclaimers or required text that must appear in creatives"),
166
166
  ] = None
167
- fonts: Annotated[Fonts | None, Field(description='Brand typography guidelines')] = None
167
+ fonts: Annotated[Fonts | None, Field(description="Brand typography guidelines")] = None
168
168
  industry: Annotated[
169
169
  str | None,
170
170
  Field(
@@ -173,19 +173,19 @@ class BrandManifest(AdCPBaseModel):
173
173
  ] = None
174
174
  logos: Annotated[
175
175
  list[Logo] | None,
176
- Field(description='Brand logo assets with semantic tags for different use cases'),
176
+ Field(description="Brand logo assets with semantic tags for different use cases"),
177
177
  ] = None
178
- metadata: Annotated[Metadata | None, Field(description='Additional brand metadata')] = None
179
- name: Annotated[str, Field(description='Brand or business name')]
178
+ metadata: Annotated[Metadata | None, Field(description="Additional brand metadata")] = None
179
+ name: Annotated[str, Field(description="Brand or business name")]
180
180
  product_catalog: Annotated[
181
181
  ProductCatalog | None,
182
182
  Field(
183
- description='Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.'
183
+ description="Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection."
184
184
  ),
185
185
  ] = None
186
- tagline: Annotated[str | None, Field(description='Brand tagline or slogan')] = None
186
+ tagline: Annotated[str | None, Field(description="Brand tagline or slogan")] = None
187
187
  target_audience: Annotated[
188
- str | None, Field(description='Primary target audience description')
188
+ str | None, Field(description="Primary target audience description")
189
189
  ] = None
190
190
  tone: Annotated[
191
191
  str | None,
@@ -196,6 +196,6 @@ class BrandManifest(AdCPBaseModel):
196
196
  url: Annotated[
197
197
  AnyUrl | None,
198
198
  Field(
199
- description='Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.'
199
+ description="Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL."
200
200
  ),
201
201
  ] = None