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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +13 -5
  3. adcp/__main__.py +4 -4
  4. adcp/adagents.py +5 -9
  5. adcp/client.py +14 -12
  6. adcp/protocols/a2a.py +3 -3
  7. adcp/protocols/base.py +2 -2
  8. adcp/protocols/mcp.py +3 -3
  9. adcp/server/base.py +6 -10
  10. adcp/server/content_standards.py +17 -49
  11. adcp/server/governance.py +20 -59
  12. adcp/server/mcp_tools.py +8 -4
  13. adcp/server/proposal.py +1 -3
  14. adcp/server/sponsored_intelligence.py +10 -28
  15. adcp/simple.py +10 -10
  16. adcp/types/__init__.py +14 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/aliases.py +55 -0
  19. adcp/types/base.py +7 -7
  20. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  21. adcp/types/generated_poc/a2ui/component.py +24 -0
  22. adcp/types/generated_poc/a2ui/surface.py +33 -0
  23. adcp/types/generated_poc/account/__init__.py +3 -0
  24. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  25. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  26. adcp/types/generated_poc/adagents.py +192 -195
  27. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  28. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  29. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  30. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  31. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  32. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  33. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  34. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  35. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  37. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  38. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  39. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  40. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  41. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  43. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  44. adcp/types/generated_poc/core/account.py +54 -0
  45. adcp/types/generated_poc/core/activation_key.py +8 -8
  46. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  47. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  48. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  49. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  50. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  51. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  52. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  53. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  54. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  55. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  56. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  57. adcp/types/generated_poc/core/async_response_data.py +2 -2
  58. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  59. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  60. adcp/types/generated_poc/core/context.py +1 -1
  61. adcp/types/generated_poc/core/creative_asset.py +12 -12
  62. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  63. adcp/types/generated_poc/core/creative_filters.py +23 -17
  64. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  65. adcp/types/generated_poc/core/creative_policy.py +4 -4
  66. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  67. adcp/types/generated_poc/core/deployment.py +20 -20
  68. adcp/types/generated_poc/core/destination.py +11 -11
  69. adcp/types/generated_poc/core/error.py +6 -6
  70. adcp/types/generated_poc/core/ext.py +1 -1
  71. adcp/types/generated_poc/core/format.py +49 -124
  72. adcp/types/generated_poc/core/format_id.py +5 -5
  73. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  74. adcp/types/generated_poc/core/identifier.py +2 -2
  75. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  76. adcp/types/generated_poc/core/measurement.py +8 -8
  77. adcp/types/generated_poc/core/media_buy.py +12 -8
  78. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  79. adcp/types/generated_poc/core/offering.py +9 -9
  80. adcp/types/generated_poc/core/package.py +8 -8
  81. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  82. adcp/types/generated_poc/core/placement.py +4 -4
  83. adcp/types/generated_poc/core/pricing_option.py +1 -1
  84. adcp/types/generated_poc/core/product.py +27 -21
  85. adcp/types/generated_poc/core/product_allocation.py +5 -5
  86. adcp/types/generated_poc/core/product_filters.py +27 -27
  87. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  88. adcp/types/generated_poc/core/promoted_products.py +2 -2
  89. adcp/types/generated_poc/core/property.py +10 -10
  90. adcp/types/generated_poc/core/property_id.py +4 -4
  91. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  92. adcp/types/generated_poc/core/property_tag.py +4 -4
  93. adcp/types/generated_poc/core/proposal.py +13 -13
  94. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  95. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  96. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  97. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  98. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  99. adcp/types/generated_poc/core/response.py +4 -4
  100. adcp/types/generated_poc/core/signal_filters.py +5 -5
  101. adcp/types/generated_poc/core/start_timing.py +3 -3
  102. adcp/types/generated_poc/core/sub_asset.py +14 -14
  103. adcp/types/generated_poc/core/targeting.py +17 -10
  104. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  105. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  106. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  107. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  108. adcp/types/generated_poc/creative/preview_render.py +25 -25
  109. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  110. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  111. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  112. adcp/types/generated_poc/enums/available_metric.py +9 -9
  113. adcp/types/generated_poc/enums/channels.py +19 -19
  114. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  115. adcp/types/generated_poc/enums/creative_action.py +5 -5
  116. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  117. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  118. adcp/types/generated_poc/enums/creative_status.py +5 -5
  119. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  120. adcp/types/generated_poc/enums/daast_version.py +2 -2
  121. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  122. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  123. adcp/types/generated_poc/enums/feed_format.py +3 -3
  124. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  125. adcp/types/generated_poc/enums/format_category.py +7 -7
  126. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  127. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  128. adcp/types/generated_poc/enums/geo_level.py +4 -4
  129. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  130. adcp/types/generated_poc/enums/http_method.py +2 -2
  131. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  132. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  133. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  134. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  135. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  136. adcp/types/generated_poc/enums/metric_type.py +8 -8
  137. adcp/types/generated_poc/enums/metro_system.py +5 -5
  138. adcp/types/generated_poc/enums/notification_type.py +4 -4
  139. adcp/types/generated_poc/enums/pacing.py +3 -3
  140. adcp/types/generated_poc/enums/postal_system.py +9 -9
  141. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  142. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  143. adcp/types/generated_poc/enums/property_type.py +8 -8
  144. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  145. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  146. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  147. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  148. adcp/types/generated_poc/enums/task_status.py +9 -9
  149. adcp/types/generated_poc/enums/task_type.py +11 -12
  150. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  151. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  152. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  153. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  154. adcp/types/generated_poc/enums/vast_version.py +5 -5
  155. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  156. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  157. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  158. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  159. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  162. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  163. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  164. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  166. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  167. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  168. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  169. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  170. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  171. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  172. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  173. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  174. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  175. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  176. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  177. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  179. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  182. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  183. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  184. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  187. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  188. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  189. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  190. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  192. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  193. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  195. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  196. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  197. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  198. adcp/types/generated_poc/property/base_property_source.py +15 -15
  199. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  200. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  201. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  202. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  203. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  204. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  205. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  206. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  207. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  208. adcp/types/generated_poc/property/property_error.py +10 -10
  209. adcp/types/generated_poc/property/property_feature.py +4 -4
  210. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  211. adcp/types/generated_poc/property/property_list.py +11 -11
  212. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  213. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  214. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  215. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  217. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  218. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  219. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  220. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  221. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  222. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  224. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  225. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  227. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  229. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  231. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  232. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  233. adcp/utils/format_assets.py +32 -32
  234. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  235. adcp-3.2.0.dist-info/RECORD +268 -0
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  237. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  238. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  239. adcp-3.0.0.dist-info/RECORD +0 -264
  240. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  241. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  242. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  243. {adcp-3.0.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
@@ -15,19 +15,19 @@ from ..core import identifier
15
15
 
16
16
 
17
17
  class Role(Enum):
18
- title_ = 'title'
19
- paragraph = 'paragraph'
20
- heading = 'heading'
21
- caption = 'caption'
22
- quote = 'quote'
23
- list_item = 'list_item'
24
- description = 'description'
18
+ title_ = "title"
19
+ paragraph = "paragraph"
20
+ heading = "heading"
21
+ caption = "caption"
22
+ quote = "quote"
23
+ list_item = "list_item"
24
+ description = "description"
25
25
 
26
26
 
27
27
  class Assets(AdCPBaseModel):
28
- content: Annotated[str, Field(description='Text content')]
28
+ content: Annotated[str, Field(description="Text content")]
29
29
  heading_level: Annotated[
30
- int | None, Field(description='Heading level (1-6), only for role=heading', ge=1, le=6)
30
+ int | None, Field(description="Heading level (1-6), only for role=heading", ge=1, le=6)
31
31
  ] = None
32
32
  language: Annotated[
33
33
  str | None,
@@ -41,123 +41,123 @@ class Assets(AdCPBaseModel):
41
41
  description="Role of this text in the document. Use 'title' for the main artifact title, 'description' for summaries."
42
42
  ),
43
43
  ] = None
44
- type: Literal['text']
44
+ type: Literal["text"]
45
45
 
46
46
 
47
47
  class TranscriptSource(Enum):
48
- original_script = 'original_script'
49
- subtitles = 'subtitles'
50
- closed_captions = 'closed_captions'
51
- dub = 'dub'
52
- generated = 'generated'
48
+ original_script = "original_script"
49
+ subtitles = "subtitles"
50
+ closed_captions = "closed_captions"
51
+ dub = "dub"
52
+ generated = "generated"
53
53
 
54
54
 
55
55
  class TranscriptSource1(Enum):
56
- original_script = 'original_script'
57
- closed_captions = 'closed_captions'
58
- generated = 'generated'
56
+ original_script = "original_script"
57
+ closed_captions = "closed_captions"
58
+ generated = "generated"
59
59
 
60
60
 
61
61
  class Identifiers(AdCPBaseModel):
62
62
  model_config = ConfigDict(
63
- extra='allow',
63
+ extra="allow",
64
64
  )
65
- apple_podcast_id: Annotated[str | None, Field(description='Apple Podcasts ID')] = None
66
- podcast_guid: Annotated[str | None, Field(description='Podcast GUID (from RSS feed)')] = None
67
- rss_url: Annotated[AnyUrl | None, Field(description='RSS feed URL')] = None
68
- spotify_show_id: Annotated[str | None, Field(description='Spotify show ID')] = None
69
- youtube_video_id: Annotated[str | None, Field(description='YouTube video ID')] = None
65
+ apple_podcast_id: Annotated[str | None, Field(description="Apple Podcasts ID")] = None
66
+ podcast_guid: Annotated[str | None, Field(description="Podcast GUID (from RSS feed)")] = None
67
+ rss_url: Annotated[AnyUrl | None, Field(description="RSS feed URL")] = None
68
+ spotify_show_id: Annotated[str | None, Field(description="Spotify show ID")] = None
69
+ youtube_video_id: Annotated[str | None, Field(description="YouTube video ID")] = None
70
70
 
71
71
 
72
72
  class Metadata(AdCPBaseModel):
73
73
  model_config = ConfigDict(
74
- extra='allow',
74
+ extra="allow",
75
75
  )
76
- author: Annotated[str | None, Field(description='Artifact author name')] = None
77
- canonical: Annotated[AnyUrl | None, Field(description='Canonical URL')] = None
76
+ author: Annotated[str | None, Field(description="Artifact author name")] = None
77
+ canonical: Annotated[AnyUrl | None, Field(description="Canonical URL")] = None
78
78
  json_ld: Annotated[
79
- list[dict[str, Any]] | None, Field(description='JSON-LD structured data (schema.org)')
79
+ list[dict[str, Any]] | None, Field(description="JSON-LD structured data (schema.org)")
80
80
  ] = None
81
- keywords: Annotated[str | None, Field(description='Artifact keywords')] = None
81
+ keywords: Annotated[str | None, Field(description="Artifact keywords")] = None
82
82
  open_graph: Annotated[
83
- dict[str, Any] | None, Field(description='Open Graph protocol metadata')
83
+ dict[str, Any] | None, Field(description="Open Graph protocol metadata")
84
84
  ] = None
85
- twitter_card: Annotated[dict[str, Any] | None, Field(description='Twitter Card metadata')] = (
85
+ twitter_card: Annotated[dict[str, Any] | None, Field(description="Twitter Card metadata")] = (
86
86
  None
87
87
  )
88
88
 
89
89
 
90
90
  class AssetAccess1(AdCPBaseModel):
91
- method: Literal['bearer_token']
92
- token: Annotated[str, Field(description='OAuth2 bearer token for Authorization header')]
91
+ method: Literal["bearer_token"]
92
+ token: Annotated[str, Field(description="OAuth2 bearer token for Authorization header")]
93
93
 
94
94
 
95
95
  class Provider(Enum):
96
- gcp = 'gcp'
97
- aws = 'aws'
96
+ gcp = "gcp"
97
+ aws = "aws"
98
98
 
99
99
 
100
100
  class AssetAccess2(AdCPBaseModel):
101
101
  credentials: Annotated[
102
- dict[str, Any] | None, Field(description='Service account credentials')
102
+ dict[str, Any] | None, Field(description="Service account credentials")
103
103
  ] = None
104
- method: Literal['service_account']
105
- provider: Annotated[Provider, Field(description='Cloud provider')]
104
+ method: Literal["service_account"]
105
+ provider: Annotated[Provider, Field(description="Cloud provider")]
106
106
 
107
107
 
108
108
  class AssetAccess3(AdCPBaseModel):
109
- method: Literal['signed_url']
109
+ method: Literal["signed_url"]
110
110
 
111
111
 
112
112
  class AssetAccess(RootModel[AssetAccess1 | AssetAccess2 | AssetAccess3]):
113
113
  root: Annotated[
114
114
  AssetAccess1 | AssetAccess2 | AssetAccess3,
115
- Field(description='Authentication for accessing secured asset URLs'),
115
+ Field(description="Authentication for accessing secured asset URLs"),
116
116
  ]
117
117
 
118
118
 
119
119
  class Assets1(AdCPBaseModel):
120
- access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
120
+ access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = (
121
121
  None
122
122
  )
123
- alt_text: Annotated[str | None, Field(description='Alt text or image description')] = None
124
- caption: Annotated[str | None, Field(description='Image caption')] = None
125
- height: Annotated[int | None, Field(description='Image height in pixels')] = None
126
- type: Literal['image']
127
- url: Annotated[AnyUrl, Field(description='Image URL')]
128
- width: Annotated[int | None, Field(description='Image width in pixels')] = None
123
+ alt_text: Annotated[str | None, Field(description="Alt text or image description")] = None
124
+ caption: Annotated[str | None, Field(description="Image caption")] = None
125
+ height: Annotated[int | None, Field(description="Image height in pixels")] = None
126
+ type: Literal["image"]
127
+ url: Annotated[AnyUrl, Field(description="Image URL")]
128
+ width: Annotated[int | None, Field(description="Image width in pixels")] = None
129
129
 
130
130
 
131
131
  class Assets2(AdCPBaseModel):
132
- access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
132
+ access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = (
133
133
  None
134
134
  )
135
- duration_ms: Annotated[int | None, Field(description='Video duration in milliseconds')] = None
136
- thumbnail_url: Annotated[AnyUrl | None, Field(description='Video thumbnail URL')] = None
137
- transcript: Annotated[str | None, Field(description='Video transcript')] = None
135
+ duration_ms: Annotated[int | None, Field(description="Video duration in milliseconds")] = None
136
+ thumbnail_url: Annotated[AnyUrl | None, Field(description="Video thumbnail URL")] = None
137
+ transcript: Annotated[str | None, Field(description="Video transcript")] = None
138
138
  transcript_source: Annotated[
139
- TranscriptSource | None, Field(description='How the transcript was generated')
139
+ TranscriptSource | None, Field(description="How the transcript was generated")
140
140
  ] = None
141
- type: Literal['video']
142
- url: Annotated[AnyUrl, Field(description='Video URL')]
141
+ type: Literal["video"]
142
+ url: Annotated[AnyUrl, Field(description="Video URL")]
143
143
 
144
144
 
145
145
  class Assets3(AdCPBaseModel):
146
- access: Annotated[AssetAccess | None, Field(description='Authentication for secured URLs')] = (
146
+ access: Annotated[AssetAccess | None, Field(description="Authentication for secured URLs")] = (
147
147
  None
148
148
  )
149
- duration_ms: Annotated[int | None, Field(description='Audio duration in milliseconds')] = None
150
- transcript: Annotated[str | None, Field(description='Audio transcript')] = None
149
+ duration_ms: Annotated[int | None, Field(description="Audio duration in milliseconds")] = None
150
+ transcript: Annotated[str | None, Field(description="Audio transcript")] = None
151
151
  transcript_source: Annotated[
152
- TranscriptSource1 | None, Field(description='How the transcript was generated')
152
+ TranscriptSource1 | None, Field(description="How the transcript was generated")
153
153
  ] = None
154
- type: Literal['audio']
155
- url: Annotated[AnyUrl, Field(description='Audio URL')]
154
+ type: Literal["audio"]
155
+ url: Annotated[AnyUrl, Field(description="Audio URL")]
156
156
 
157
157
 
158
158
  class Artifact(AdCPBaseModel):
159
159
  model_config = ConfigDict(
160
- extra='allow',
160
+ extra="allow",
161
161
  )
162
162
  artifact_id: Annotated[
163
163
  str,
@@ -168,36 +168,36 @@ class Artifact(AdCPBaseModel):
168
168
  assets: Annotated[
169
169
  list[Assets | Assets1 | Assets2 | Assets3],
170
170
  Field(
171
- description='Artifact assets in document flow order - text blocks, images, video, audio'
171
+ description="Artifact assets in document flow order - text blocks, images, video, audio"
172
172
  ),
173
173
  ]
174
174
  format_id: Annotated[
175
175
  format_id_1.FormatId | None,
176
176
  Field(
177
- description='Optional reference to a format definition. Uses the same format registry as creative formats.'
177
+ description="Optional reference to a format definition. Uses the same format registry as creative formats."
178
178
  ),
179
179
  ] = None
180
180
  identifiers: Annotated[
181
- Identifiers | None, Field(description='Platform-specific identifiers for this artifact')
181
+ Identifiers | None, Field(description="Platform-specific identifiers for this artifact")
182
182
  ] = None
183
183
  last_update_time: Annotated[
184
184
  AwareDatetime | None,
185
- Field(description='When the artifact was last modified (ISO 8601 format)'),
185
+ Field(description="When the artifact was last modified (ISO 8601 format)"),
186
186
  ] = None
187
187
  metadata: Annotated[
188
- Metadata | None, Field(description='Rich metadata extracted from the artifact')
188
+ Metadata | None, Field(description="Rich metadata extracted from the artifact")
189
189
  ] = None
190
190
  property_id: Annotated[
191
191
  identifier.Identifier,
192
- Field(description='Identifier for the property where this artifact appears'),
192
+ Field(description="Identifier for the property where this artifact appears"),
193
193
  ]
194
194
  published_time: Annotated[
195
- AwareDatetime | None, Field(description='When the artifact was published (ISO 8601 format)')
195
+ AwareDatetime | None, Field(description="When the artifact was published (ISO 8601 format)")
196
196
  ] = None
197
197
  url: Annotated[
198
198
  AnyUrl | None,
199
199
  Field(
200
- description='Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes).'
200
+ description="Optional URL for this artifact (web page, podcast feed, video page). Not all artifacts have URLs (e.g., Instagram content, podcast segments, TV scenes)."
201
201
  ),
202
202
  ] = None
203
203
  variant_id: Annotated[
@@ -14,51 +14,51 @@ from . import artifact as artifact_1
14
14
 
15
15
 
16
16
  class Pagination(AdCPBaseModel):
17
- batch_number: Annotated[int | None, Field(description='Current batch number (1-indexed)')] = (
17
+ batch_number: Annotated[int | None, Field(description="Current batch number (1-indexed)")] = (
18
18
  None
19
19
  )
20
20
  total_artifacts: Annotated[
21
- int | None, Field(description='Total artifacts in the delivery period')
21
+ int | None, Field(description="Total artifacts in the delivery period")
22
22
  ] = None
23
23
  total_batches: Annotated[
24
- int | None, Field(description='Total batches for this delivery period')
24
+ int | None, Field(description="Total batches for this delivery period")
25
25
  ] = None
26
26
 
27
27
 
28
28
  class Artifact(AdCPBaseModel):
29
- artifact: Annotated[artifact_1.Artifact, Field(description='The content artifact')]
29
+ artifact: Annotated[artifact_1.Artifact, Field(description="The content artifact")]
30
30
  delivered_at: Annotated[
31
- AwareDatetime, Field(description='When the impression was delivered (ISO 8601)')
31
+ AwareDatetime, Field(description="When the impression was delivered (ISO 8601)")
32
32
  ]
33
33
  impression_id: Annotated[
34
34
  str | None,
35
- Field(description='Optional impression identifier for correlation with delivery reports'),
35
+ Field(description="Optional impression identifier for correlation with delivery reports"),
36
36
  ] = None
37
37
  package_id: Annotated[
38
- str | None, Field(description='Package within the media buy this artifact relates to')
38
+ str | None, Field(description="Package within the media buy this artifact relates to")
39
39
  ] = None
40
40
 
41
41
 
42
42
  class ArtifactWebhookPayload(AdCPBaseModel):
43
43
  model_config = ConfigDict(
44
- extra='allow',
44
+ extra="allow",
45
45
  )
46
46
  artifacts: Annotated[
47
- list[Artifact], Field(description='Content artifacts from delivered impressions')
47
+ list[Artifact], Field(description="Content artifacts from delivered impressions")
48
48
  ]
49
49
  batch_id: Annotated[
50
50
  str,
51
51
  Field(
52
- description='Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment.'
52
+ description="Unique identifier for this batch of artifacts. Use for deduplication and acknowledgment."
53
53
  ),
54
54
  ]
55
55
  ext: ext_1.ExtensionObject | None = None
56
56
  media_buy_id: Annotated[
57
- str, Field(description='Media buy identifier these artifacts belong to')
57
+ str, Field(description="Media buy identifier these artifacts belong to")
58
58
  ]
59
59
  pagination: Annotated[
60
- Pagination | None, Field(description='Pagination info when batching large artifact sets')
60
+ Pagination | None, Field(description="Pagination info when batching large artifact sets")
61
61
  ] = None
62
62
  timestamp: Annotated[
63
- AwareDatetime, Field(description='When this batch was generated (ISO 8601)')
63
+ AwareDatetime, Field(description="When this batch was generated (ISO 8601)")
64
64
  ]
@@ -13,5 +13,5 @@ from . import artifact as artifact_1
13
13
 
14
14
 
15
15
  class CalibrateContentRequest(AdCPBaseModel):
16
- artifact: Annotated[artifact_1.Artifact, Field(description='Artifact to evaluate')]
17
- standards_id: Annotated[str, Field(description='Standards configuration to calibrate against')]
16
+ artifact: Annotated[artifact_1.Artifact, Field(description="Artifact to evaluate")]
17
+ standards_id: Annotated[str, Field(description="Standards configuration to calibrate against")]
@@ -14,53 +14,53 @@ from ..core import error
14
14
 
15
15
 
16
16
  class Status(Enum):
17
- passed = 'passed'
18
- failed = 'failed'
19
- warning = 'warning'
20
- unevaluated = 'unevaluated'
17
+ passed = "passed"
18
+ failed = "failed"
19
+ warning = "warning"
20
+ unevaluated = "unevaluated"
21
21
 
22
22
 
23
23
  class Feature(AdCPBaseModel):
24
24
  explanation: Annotated[
25
25
  str | None,
26
- Field(description='Human-readable explanation of why this feature passed or failed'),
26
+ Field(description="Human-readable explanation of why this feature passed or failed"),
27
27
  ] = None
28
28
  feature_id: Annotated[
29
29
  str,
30
30
  Field(
31
- description='Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)'
31
+ description="Which feature was evaluated (e.g., brand_safety, brand_suitability, competitor_adjacency)"
32
32
  ),
33
33
  ]
34
- status: Annotated[Status, Field(description='Evaluation status for this feature')]
34
+ status: Annotated[Status, Field(description="Evaluation status for this feature")]
35
35
 
36
36
 
37
37
  class Verdict(Enum):
38
- pass_ = 'pass'
39
- fail = 'fail'
38
+ pass_ = "pass"
39
+ fail = "fail"
40
40
 
41
41
 
42
42
  class CalibrateContentResponse1(AdCPBaseModel):
43
43
  confidence: Annotated[
44
- float | None, Field(description='Model confidence in the verdict (0-1)', ge=0.0, le=1.0)
44
+ float | None, Field(description="Model confidence in the verdict (0-1)", ge=0.0, le=1.0)
45
45
  ] = None
46
46
  errors: Annotated[
47
- Any | None, Field(description='Field must not be present in success response')
47
+ Any | None, Field(description="Field must not be present in success response")
48
48
  ] = None
49
49
  explanation: Annotated[
50
- str | None, Field(description='Detailed natural language explanation of the decision')
50
+ str | None, Field(description="Detailed natural language explanation of the decision")
51
51
  ] = None
52
52
  features: Annotated[
53
- list[Feature] | None, Field(description='Per-feature breakdown with explanations')
53
+ list[Feature] | None, Field(description="Per-feature breakdown with explanations")
54
54
  ] = None
55
55
  verdict: Annotated[
56
- Verdict, Field(description='Overall pass/fail verdict for the content evaluation')
56
+ Verdict, Field(description="Overall pass/fail verdict for the content evaluation")
57
57
  ]
58
58
 
59
59
 
60
60
  class CalibrateContentResponse2(AdCPBaseModel):
61
61
  errors: list[error.Error]
62
62
  verdict: Annotated[
63
- Any | None, Field(description='Field must not be present in error response')
63
+ Any | None, Field(description="Field must not be present in error response")
64
64
  ] = None
65
65
 
66
66
 
@@ -68,7 +68,7 @@ class CalibrateContentResponse(RootModel[CalibrateContentResponse1 | CalibrateCo
68
68
  root: Annotated[
69
69
  CalibrateContentResponse1 | CalibrateContentResponse2,
70
70
  Field(
71
- description='Response payload with verdict and detailed explanations for collaborative calibration',
72
- title='Calibrate Content Response',
71
+ description="Response payload with verdict and detailed explanations for collaborative calibration",
72
+ title="Calibrate Content Response",
73
73
  ),
74
74
  ]
@@ -17,11 +17,11 @@ from . import artifact
17
17
  class CalibrationExemplars(AdCPBaseModel):
18
18
  fail: Annotated[
19
19
  list[artifact.Artifact] | None,
20
- Field(description='Artifacts that fail the content standards'),
20
+ Field(description="Artifacts that fail the content standards"),
21
21
  ] = None
22
22
  pass_: Annotated[
23
23
  list[artifact.Artifact] | None,
24
- Field(alias='pass', description='Artifacts that pass the content standards'),
24
+ Field(alias="pass", description="Artifacts that pass the content standards"),
25
25
  ] = None
26
26
 
27
27
 
@@ -29,19 +29,19 @@ class ContentStandards(AdCPBaseModel):
29
29
  calibration_exemplars: Annotated[
30
30
  CalibrationExemplars | None,
31
31
  Field(
32
- description='Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions.'
32
+ description="Training/test set to calibrate policy interpretation. Provides concrete examples of pass/fail decisions."
33
33
  ),
34
34
  ] = None
35
35
  channels_any: Annotated[
36
36
  list[channels.MediaChannel] | None,
37
37
  Field(
38
- description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
38
+ description="Advertising channels. Standards apply to ANY of the listed channels (OR logic)."
39
39
  ),
40
40
  ] = None
41
41
  countries_all: Annotated[
42
42
  list[str] | None,
43
43
  Field(
44
- description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
44
+ description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic)."
45
45
  ),
46
46
  ] = None
47
47
  ext: ext_1.ExtensionObject | None = None
@@ -53,14 +53,14 @@ class ContentStandards(AdCPBaseModel):
53
53
  ),
54
54
  ] = None
55
55
  name: Annotated[
56
- str | None, Field(description='Human-readable name for this standards configuration')
56
+ str | None, Field(description="Human-readable name for this standards configuration")
57
57
  ] = None
58
58
  policy: Annotated[
59
59
  str | None,
60
60
  Field(
61
- description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
61
+ description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments."
62
62
  ),
63
63
  ] = None
64
64
  standards_id: Annotated[
65
- str, Field(description='Unique identifier for this standards configuration')
65
+ str, Field(description="Unique identifier for this standards configuration")
66
66
  ]
@@ -17,9 +17,9 @@ from . import artifact
17
17
 
18
18
  class Fail(AdCPBaseModel):
19
19
  language: Annotated[
20
- str | None, Field(description='BCP 47 language tag for content at this URL')
20
+ str | None, Field(description="BCP 47 language tag for content at this URL")
21
21
  ] = None
22
- type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
22
+ type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")]
23
23
  value: Annotated[
24
24
  AnyUrl,
25
25
  Field(
@@ -30,9 +30,9 @@ class Fail(AdCPBaseModel):
30
30
 
31
31
  class Pass(AdCPBaseModel):
32
32
  language: Annotated[
33
- str | None, Field(description='BCP 47 language tag for content at this URL')
33
+ str | None, Field(description="BCP 47 language tag for content at this URL")
34
34
  ] = None
35
- type: Annotated[Literal['url'], Field(description='Indicates this is a URL reference')]
35
+ type: Annotated[Literal["url"], Field(description="Indicates this is a URL reference")]
36
36
  value: Annotated[
37
37
  AnyUrl,
38
38
  Field(
@@ -45,17 +45,17 @@ class Scope(AdCPBaseModel):
45
45
  channels_any: Annotated[
46
46
  list[channels.MediaChannel] | None,
47
47
  Field(
48
- description='Advertising channels. Standards apply to ANY of the listed channels (OR logic).'
48
+ description="Advertising channels. Standards apply to ANY of the listed channels (OR logic)."
49
49
  ),
50
50
  ] = None
51
51
  countries_all: Annotated[
52
52
  list[str] | None,
53
53
  Field(
54
- description='ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic).'
54
+ description="ISO 3166-1 alpha-2 country codes. Standards apply in ALL listed countries (AND logic)."
55
55
  ),
56
56
  ] = None
57
57
  description: Annotated[
58
- str | None, Field(description='Human-readable description of this scope')
58
+ str | None, Field(description="Human-readable description of this scope")
59
59
  ] = None
60
60
  languages_any: Annotated[
61
61
  list[str],
@@ -68,22 +68,22 @@ class Scope(AdCPBaseModel):
68
68
 
69
69
  class CalibrationExemplars(AdCPBaseModel):
70
70
  fail: Annotated[
71
- list[Fail | artifact.Artifact] | None, Field(description='Content that fails the standards')
71
+ list[Fail | artifact.Artifact] | None, Field(description="Content that fails the standards")
72
72
  ] = None
73
73
  pass_: Annotated[
74
74
  list[Pass | artifact.Artifact] | None,
75
- Field(alias='pass', description='Content that passes the standards'),
75
+ Field(alias="pass", description="Content that passes the standards"),
76
76
  ] = None
77
77
 
78
78
 
79
79
  class CreateContentStandardsRequest(AdCPBaseModel):
80
80
  model_config = ConfigDict(
81
- extra='allow',
81
+ extra="allow",
82
82
  )
83
83
  calibration_exemplars: Annotated[
84
84
  CalibrationExemplars | None,
85
85
  Field(
86
- description='Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content.'
86
+ description="Training/test set to calibrate policy interpretation. Use URL references for pages to be fetched and analyzed, or full artifacts for pre-extracted content."
87
87
  ),
88
88
  ] = None
89
89
  context: context_1.ContextObject | None = None
@@ -91,7 +91,7 @@ class CreateContentStandardsRequest(AdCPBaseModel):
91
91
  policy: Annotated[
92
92
  str,
93
93
  Field(
94
- description='Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments.'
94
+ description="Natural language policy describing acceptable and unacceptable content contexts. Used by LLMs and human reviewers to make judgments."
95
95
  ),
96
96
  ]
97
- scope: Annotated[Scope, Field(description='Where this standards configuration applies')]
97
+ scope: Annotated[Scope, Field(description="Where this standards configuration applies")]
@@ -17,11 +17,11 @@ from ..core import ext as ext_1
17
17
  class CreateContentStandardsResponse1(AdCPBaseModel):
18
18
  context: context_1.ContextObject | None = None
19
19
  errors: Annotated[
20
- Any | None, Field(description='Field must not be present in success response')
20
+ Any | None, Field(description="Field must not be present in success response")
21
21
  ] = None
22
22
  ext: ext_1.ExtensionObject | None = None
23
23
  standards_id: Annotated[
24
- str, Field(description='Unique identifier for the created standards configuration')
24
+ str, Field(description="Unique identifier for the created standards configuration")
25
25
  ]
26
26
 
27
27
 
@@ -29,14 +29,14 @@ class CreateContentStandardsResponse2(AdCPBaseModel):
29
29
  conflicting_standards_id: Annotated[
30
30
  str | None,
31
31
  Field(
32
- description='If the error is a scope conflict, the ID of the existing standards that conflict'
32
+ description="If the error is a scope conflict, the ID of the existing standards that conflict"
33
33
  ),
34
34
  ] = None
35
35
  context: context_1.ContextObject | None = None
36
36
  errors: list[error.Error]
37
37
  ext: ext_1.ExtensionObject | None = None
38
38
  standards_id: Annotated[
39
- Any | None, Field(description='Field must not be present in error response')
39
+ Any | None, Field(description="Field must not be present in error response")
40
40
  ] = None
41
41
 
42
42
 
@@ -46,7 +46,7 @@ class CreateContentStandardsResponse(
46
46
  root: Annotated[
47
47
  CreateContentStandardsResponse1 | CreateContentStandardsResponse2,
48
48
  Field(
49
- description='Response payload for creating a content standards configuration',
50
- title='Create Content Standards Response',
49
+ description="Response payload for creating a content standards configuration",
50
+ title="Create Content Standards Response",
51
51
  ),
52
52
  ]
@@ -17,5 +17,5 @@ class GetContentStandardsRequest(AdCPBaseModel):
17
17
  context: context_1.ContextObject | None = None
18
18
  ext: ext_1.ExtensionObject | None = None
19
19
  standards_id: Annotated[
20
- str, Field(description='Identifier for the standards configuration to retrieve')
20
+ str, Field(description="Identifier for the standards configuration to retrieve")
21
21
  ]
@@ -20,14 +20,14 @@ class GetContentStandardsResponse2(AdCPBaseModel):
20
20
  errors: list[error.Error]
21
21
  ext: ext_1.ExtensionObject | None = None
22
22
  standards_id: Annotated[
23
- Any | None, Field(description='Field must not be present in error response')
23
+ Any | None, Field(description="Field must not be present in error response")
24
24
  ] = None
25
25
 
26
26
 
27
27
  class GetContentStandardsResponse1(ContentStandards):
28
28
  context: context_1.ContextObject | None = None
29
29
  errors: Annotated[
30
- Any | None, Field(description='Field must not be present in success response')
30
+ Any | None, Field(description="Field must not be present in success response")
31
31
  ] = None
32
32
 
33
33
 
@@ -37,7 +37,7 @@ class GetContentStandardsResponse(
37
37
  root: Annotated[
38
38
  GetContentStandardsResponse1 | GetContentStandardsResponse2,
39
39
  Field(
40
- description='Response payload with content safety policies',
41
- title='Get Content Standards Response',
40
+ description="Response payload with content safety policies",
41
+ title="Get Content Standards Response",
42
42
  ),
43
43
  ]