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,18 +15,18 @@ from ..core import ext as ext_1
15
15
 
16
16
 
17
17
  class Method(Enum):
18
- random = 'random'
19
- stratified = 'stratified'
20
- recent = 'recent'
21
- failures_only = 'failures_only'
18
+ random = "random"
19
+ stratified = "stratified"
20
+ recent = "recent"
21
+ failures_only = "failures_only"
22
22
 
23
23
 
24
24
  class Sampling(AdCPBaseModel):
25
- method: Annotated[Method | None, Field(description='How to select the sample')] = None
25
+ method: Annotated[Method | None, Field(description="How to select the sample")] = None
26
26
  rate: Annotated[
27
27
  float | None,
28
28
  Field(
29
- description='Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.',
29
+ description="Sampling rate (0-1). 1.0 = all deliveries, 0.25 = 25% sample.",
30
30
  ge=0.0,
31
31
  le=1.0,
32
32
  ),
@@ -34,8 +34,8 @@ class Sampling(AdCPBaseModel):
34
34
 
35
35
 
36
36
  class TimeRange(AdCPBaseModel):
37
- end: Annotated[AwareDatetime | None, Field(description='End of time range (exclusive)')] = None
38
- start: Annotated[AwareDatetime | None, Field(description='Start of time range (inclusive)')] = (
37
+ end: Annotated[AwareDatetime | None, Field(description="End of time range (exclusive)")] = None
38
+ start: Annotated[AwareDatetime | None, Field(description="Start of time range (inclusive)")] = (
39
39
  None
40
40
  )
41
41
 
@@ -43,22 +43,22 @@ class TimeRange(AdCPBaseModel):
43
43
  class GetMediaBuyArtifactsRequest(AdCPBaseModel):
44
44
  context: context_1.ContextObject | None = None
45
45
  cursor: Annotated[
46
- str | None, Field(description='Pagination cursor for fetching subsequent pages')
46
+ str | None, Field(description="Pagination cursor for fetching subsequent pages")
47
47
  ] = None
48
48
  ext: ext_1.ExtensionObject | None = None
49
49
  limit: Annotated[
50
- int | None, Field(description='Maximum artifacts to return per request', ge=1, le=10000)
50
+ int | None, Field(description="Maximum artifacts to return per request", ge=1, le=10000)
51
51
  ] = 1000
52
- media_buy_id: Annotated[str, Field(description='Media buy to get artifacts from')]
52
+ media_buy_id: Annotated[str, Field(description="Media buy to get artifacts from")]
53
53
  package_ids: Annotated[
54
- list[str] | None, Field(description='Filter to specific packages within the media buy')
54
+ list[str] | None, Field(description="Filter to specific packages within the media buy")
55
55
  ] = None
56
56
  sampling: Annotated[
57
57
  Sampling | None,
58
58
  Field(
59
- description='Sampling parameters. Defaults to the sampling rate agreed in the media buy.'
59
+ description="Sampling parameters. Defaults to the sampling rate agreed in the media buy."
60
60
  ),
61
61
  ] = None
62
- time_range: Annotated[TimeRange | None, Field(description='Filter to specific time period')] = (
62
+ time_range: Annotated[TimeRange | None, Field(description="Filter to specific time period")] = (
63
63
  None
64
64
  )
@@ -17,38 +17,38 @@ from . import artifact as artifact_1
17
17
 
18
18
 
19
19
  class BrandContext(AdCPBaseModel):
20
- brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
21
- sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
20
+ brand_id: Annotated[str | None, Field(description="Brand identifier")] = None
21
+ sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None
22
22
 
23
23
 
24
24
  class LocalVerdict(Enum):
25
- pass_ = 'pass'
26
- fail = 'fail'
27
- unevaluated = 'unevaluated'
25
+ pass_ = "pass"
26
+ fail = "fail"
27
+ unevaluated = "unevaluated"
28
28
 
29
29
 
30
30
  class Pagination(AdCPBaseModel):
31
- cursor: Annotated[str | None, Field(description='Cursor for fetching the next page')] = None
32
- has_more: Annotated[bool | None, Field(description='Whether more results are available')] = None
31
+ cursor: Annotated[str | None, Field(description="Cursor for fetching the next page")] = None
32
+ has_more: Annotated[bool | None, Field(description="Whether more results are available")] = None
33
33
 
34
34
 
35
35
  class Method(Enum):
36
- random = 'random'
37
- stratified = 'stratified'
38
- recent = 'recent'
39
- failures_only = 'failures_only'
36
+ random = "random"
37
+ stratified = "stratified"
38
+ recent = "recent"
39
+ failures_only = "failures_only"
40
40
 
41
41
 
42
42
  class SamplingInfo(AdCPBaseModel):
43
- effective_rate: Annotated[float | None, Field(description='Actual sampling rate achieved')] = (
43
+ effective_rate: Annotated[float | None, Field(description="Actual sampling rate achieved")] = (
44
44
  None
45
45
  )
46
- method: Annotated[Method | None, Field(description='Sampling method used')] = None
46
+ method: Annotated[Method | None, Field(description="Sampling method used")] = None
47
47
  sampled_count: Annotated[
48
- int | None, Field(description='Number of artifacts in this response')
48
+ int | None, Field(description="Number of artifacts in this response")
49
49
  ] = None
50
50
  total_deliveries: Annotated[
51
- int | None, Field(description='Total deliveries in the time range')
51
+ int | None, Field(description="Total deliveries in the time range")
52
52
  ] = None
53
53
 
54
54
 
@@ -57,51 +57,51 @@ class GetMediaBuyArtifactsResponse2(AdCPBaseModel):
57
57
  errors: list[error.Error]
58
58
  ext: ext_1.ExtensionObject | None = None
59
59
  media_buy_id: Annotated[
60
- Any | None, Field(description='Field must not be present in error response')
60
+ Any | None, Field(description="Field must not be present in error response")
61
61
  ] = None
62
62
 
63
63
 
64
64
  class Artifact(AdCPBaseModel):
65
- artifact: Annotated[artifact_1.Artifact, Field(description='Full artifact with content assets')]
65
+ artifact: Annotated[artifact_1.Artifact, Field(description="Full artifact with content assets")]
66
66
  brand_context: Annotated[
67
67
  BrandContext | None,
68
68
  Field(
69
- description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
69
+ description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers."
70
70
  ),
71
71
  ] = None
72
72
  channel: Annotated[
73
- str | None, Field(description='Channel type (e.g., display, video, audio, social)')
73
+ str | None, Field(description="Channel type (e.g., display, video, audio, social)")
74
74
  ] = None
75
75
  country: Annotated[
76
- str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
76
+ str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred")
77
77
  ] = None
78
78
  local_verdict: Annotated[
79
79
  LocalVerdict | None, Field(description="Seller's local model verdict for this artifact")
80
80
  ] = None
81
81
  package_id: Annotated[
82
- str | None, Field(description='Which package this delivery belongs to')
82
+ str | None, Field(description="Which package this delivery belongs to")
83
83
  ] = None
84
- record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
85
- timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
84
+ record_id: Annotated[str, Field(description="Unique identifier for this delivery record")]
85
+ timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = (
86
86
  None
87
87
  )
88
88
 
89
89
 
90
90
  class GetMediaBuyArtifactsResponse1(AdCPBaseModel):
91
91
  artifacts: Annotated[
92
- list[Artifact], Field(description='Delivery records with full artifact content')
92
+ list[Artifact], Field(description="Delivery records with full artifact content")
93
93
  ]
94
94
  context: context_1.ContextObject | None = None
95
95
  errors: Annotated[
96
- Any | None, Field(description='Field must not be present in success response')
96
+ Any | None, Field(description="Field must not be present in success response")
97
97
  ] = None
98
98
  ext: ext_1.ExtensionObject | None = None
99
- media_buy_id: Annotated[str, Field(description='Media buy these artifacts belong to')]
99
+ media_buy_id: Annotated[str, Field(description="Media buy these artifacts belong to")]
100
100
  pagination: Annotated[
101
- Pagination | None, Field(description='Pagination information for large result sets')
101
+ Pagination | None, Field(description="Pagination information for large result sets")
102
102
  ] = None
103
103
  sampling_info: Annotated[
104
- SamplingInfo | None, Field(description='Information about how the sample was generated')
104
+ SamplingInfo | None, Field(description="Information about how the sample was generated")
105
105
  ] = None
106
106
 
107
107
 
@@ -111,7 +111,7 @@ class GetMediaBuyArtifactsResponse(
111
111
  root: Annotated[
112
112
  GetMediaBuyArtifactsResponse1 | GetMediaBuyArtifactsResponse2,
113
113
  Field(
114
- description='Response containing content artifacts from a media buy for validation',
115
- title='Get Media Buy Artifacts Response',
114
+ description="Response containing content artifacts from a media buy for validation",
115
+ title="Get Media Buy Artifacts Response",
116
116
  ),
117
117
  ]
@@ -16,16 +16,16 @@ from ..enums import channels as channels_1
16
16
 
17
17
  class ListContentStandardsRequest(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  channels: Annotated[
22
- list[channels_1.MediaChannel] | None, Field(description='Filter by channel')
22
+ list[channels_1.MediaChannel] | None, Field(description="Filter by channel")
23
23
  ] = None
24
24
  context: context_1.ContextObject | None = None
25
25
  countries: Annotated[
26
- list[str] | None, Field(description='Filter by ISO 3166-1 alpha-2 country codes')
26
+ list[str] | None, Field(description="Filter by ISO 3166-1 alpha-2 country codes")
27
27
  ] = None
28
28
  ext: ext_1.ExtensionObject | None = None
29
- languages: Annotated[list[str] | None, Field(description='Filter by BCP 47 language tags')] = (
29
+ languages: Annotated[list[str] | None, Field(description="Filter by BCP 47 language tags")] = (
30
30
  None
31
31
  )
@@ -20,19 +20,19 @@ class ListContentStandardsResponse2(AdCPBaseModel):
20
20
  errors: list[error.Error]
21
21
  ext: ext_1.ExtensionObject | None = None
22
22
  standards: 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 ListContentStandardsResponse1(AdCPBaseModel):
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
  ext: ext_1.ExtensionObject | None = None
33
33
  standards: Annotated[
34
34
  list[content_standards.ContentStandards],
35
- Field(description='Array of content standards configurations matching the filter criteria'),
35
+ Field(description="Array of content standards configurations matching the filter criteria"),
36
36
  ]
37
37
 
38
38
 
@@ -42,7 +42,7 @@ class ListContentStandardsResponse(
42
42
  root: Annotated[
43
43
  ListContentStandardsResponse1 | ListContentStandardsResponse2,
44
44
  Field(
45
- description='Response payload with list of content standards configurations',
46
- title='List Content Standards Response',
45
+ description="Response payload with list of content standards configurations",
46
+ title="List Content Standards Response",
47
47
  ),
48
48
  ]
@@ -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] | None,
@@ -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 UpdateContentStandardsRequest(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='Updated 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="Updated 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,11 +91,11 @@ class UpdateContentStandardsRequest(AdCPBaseModel):
91
91
  policy: Annotated[
92
92
  str | None,
93
93
  Field(
94
- description='Updated natural language policy describing acceptable and unacceptable content contexts.'
94
+ description="Updated natural language policy describing acceptable and unacceptable content contexts."
95
95
  ),
96
96
  ] = None
97
97
  scope: Annotated[
98
98
  Scope | None,
99
- Field(description='Updated scope for where this standards configuration applies'),
99
+ Field(description="Updated scope for where this standards configuration applies"),
100
100
  ] = None
101
- standards_id: Annotated[str, Field(description='ID of the standards configuration to update')]
101
+ standards_id: Annotated[str, Field(description="ID of the standards configuration to update")]
@@ -16,19 +16,19 @@ from ..core import ext as ext_1
16
16
 
17
17
  class UpdateContentStandardsResponse(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='allow',
19
+ extra="allow",
20
20
  )
21
21
  conflicting_standards_id: Annotated[
22
22
  str | None,
23
23
  Field(
24
- description='If scope change conflicts with another configuration, the ID of the conflicting standards'
24
+ description="If scope change conflicts with another configuration, the ID of the conflicting standards"
25
25
  ),
26
26
  ] = None
27
27
  context: context_1.ContextObject | None = None
28
28
  errors: Annotated[
29
- list[error.Error] | None, Field(description='Errors that occurred during the update')
29
+ list[error.Error] | None, Field(description="Errors that occurred during the update")
30
30
  ] = None
31
31
  ext: ext_1.ExtensionObject | None = None
32
32
  standards_id: Annotated[
33
- str | None, Field(description='ID of the updated standards configuration')
33
+ str | None, Field(description="ID of the updated standards configuration")
34
34
  ] = None
@@ -15,30 +15,30 @@ from . import artifact as artifact_1
15
15
 
16
16
 
17
17
  class BrandContext(AdCPBaseModel):
18
- brand_id: Annotated[str | None, Field(description='Brand identifier')] = None
19
- sku_id: Annotated[str | None, Field(description='Product/SKU identifier if applicable')] = None
18
+ brand_id: Annotated[str | None, Field(description="Brand identifier")] = None
19
+ sku_id: Annotated[str | None, Field(description="Product/SKU identifier if applicable")] = None
20
20
 
21
21
 
22
22
  class Record(AdCPBaseModel):
23
- artifact: Annotated[artifact_1.Artifact, Field(description='Artifact where ad was delivered')]
23
+ artifact: Annotated[artifact_1.Artifact, Field(description="Artifact where ad was delivered")]
24
24
  brand_context: Annotated[
25
25
  BrandContext | None,
26
26
  Field(
27
- description='Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers.'
27
+ description="Brand information for policy evaluation. Schema TBD - placeholder for brand identifiers."
28
28
  ),
29
29
  ] = None
30
30
  channel: Annotated[
31
- str | None, Field(description='Channel type (e.g., display, video, audio, social)')
31
+ str | None, Field(description="Channel type (e.g., display, video, audio, social)")
32
32
  ] = None
33
33
  country: Annotated[
34
- str | None, Field(description='ISO 3166-1 alpha-2 country code where delivery occurred')
34
+ str | None, Field(description="ISO 3166-1 alpha-2 country code where delivery occurred")
35
35
  ] = None
36
36
  media_buy_id: Annotated[
37
37
  str | None,
38
- Field(description='Media buy this record belongs to (when batching across multiple buys)'),
38
+ Field(description="Media buy this record belongs to (when batching across multiple buys)"),
39
39
  ] = None
40
- record_id: Annotated[str, Field(description='Unique identifier for this delivery record')]
41
- timestamp: Annotated[AwareDatetime | None, Field(description='When the delivery occurred')] = (
40
+ record_id: Annotated[str, Field(description="Unique identifier for this delivery record")]
41
+ timestamp: Annotated[AwareDatetime | None, Field(description="When the delivery occurred")] = (
42
42
  None
43
43
  )
44
44
 
@@ -47,13 +47,13 @@ class ValidateContentDeliveryRequest(AdCPBaseModel):
47
47
  context: context_1.ContextObject | None = None
48
48
  ext: ext_1.ExtensionObject | None = None
49
49
  feature_ids: Annotated[
50
- list[str] | None, Field(description='Specific features to evaluate (defaults to all)')
50
+ list[str] | None, Field(description="Specific features to evaluate (defaults to all)")
51
51
  ] = None
52
52
  include_passed: Annotated[
53
- bool | None, Field(description='Include passed records in results')
53
+ bool | None, Field(description="Include passed records in results")
54
54
  ] = True
55
55
  records: Annotated[
56
56
  list[Record],
57
- Field(description='Delivery records to validate (max 10,000)', max_length=10000),
57
+ Field(description="Delivery records to validate (max 10,000)", max_length=10000),
58
58
  ]
59
- standards_id: Annotated[str, Field(description='Standards configuration to validate against')]
59
+ standards_id: Annotated[str, Field(description="Standards configuration to validate against")]
@@ -16,10 +16,10 @@ from ..core import ext as ext_1
16
16
 
17
17
 
18
18
  class Status(Enum):
19
- passed = 'passed'
20
- failed = 'failed'
21
- warning = 'warning'
22
- unevaluated = 'unevaluated'
19
+ passed = "passed"
20
+ failed = "failed"
21
+ warning = "warning"
22
+ unevaluated = "unevaluated"
23
23
 
24
24
 
25
25
  class Feature(AdCPBaseModel):
@@ -28,7 +28,7 @@ class Feature(AdCPBaseModel):
28
28
  rule_id: Annotated[
29
29
  str | None,
30
30
  Field(
31
- description='Which rule triggered this result (e.g., GARM category, Scope3 standard)'
31
+ description="Which rule triggered this result (e.g., GARM category, Scope3 standard)"
32
32
  ),
33
33
  ] = None
34
34
  status: Status
@@ -36,16 +36,16 @@ class Feature(AdCPBaseModel):
36
36
 
37
37
 
38
38
  class Verdict(Enum):
39
- pass_ = 'pass'
40
- fail = 'fail'
39
+ pass_ = "pass"
40
+ fail = "fail"
41
41
 
42
42
 
43
43
  class Result(AdCPBaseModel):
44
44
  features: Annotated[
45
- list[Feature] | None, Field(description='Optional feature-level breakdown')
45
+ list[Feature] | None, Field(description="Optional feature-level breakdown")
46
46
  ] = None
47
- record_id: Annotated[str, Field(description='Which delivery record was evaluated')]
48
- verdict: Annotated[Verdict, Field(description='Overall pass/fail verdict for this record')]
47
+ record_id: Annotated[str, Field(description="Which delivery record was evaluated")]
48
+ verdict: Annotated[Verdict, Field(description="Overall pass/fail verdict for this record")]
49
49
 
50
50
 
51
51
  class Summary(AdCPBaseModel):
@@ -57,11 +57,11 @@ class Summary(AdCPBaseModel):
57
57
  class ValidateContentDeliveryResponse1(AdCPBaseModel):
58
58
  context: context_1.ContextObject | None = None
59
59
  errors: Annotated[
60
- Any | None, Field(description='Field must not be present in success response')
60
+ Any | None, Field(description="Field must not be present in success response")
61
61
  ] = None
62
62
  ext: ext_1.ExtensionObject | None = None
63
- results: Annotated[list[Result], Field(description='Per-record evaluation results')]
64
- summary: Annotated[Summary, Field(description='Summary counts across all records')]
63
+ results: Annotated[list[Result], Field(description="Per-record evaluation results")]
64
+ summary: Annotated[Summary, Field(description="Summary counts across all records")]
65
65
 
66
66
 
67
67
  class ValidateContentDeliveryResponse2(AdCPBaseModel):
@@ -69,7 +69,7 @@ class ValidateContentDeliveryResponse2(AdCPBaseModel):
69
69
  errors: list[error.Error]
70
70
  ext: ext_1.ExtensionObject | None = None
71
71
  summary: Annotated[
72
- Any | None, Field(description='Field must not be present in error response')
72
+ Any | None, Field(description="Field must not be present in error response")
73
73
  ] = None
74
74
 
75
75
 
@@ -79,7 +79,7 @@ class ValidateContentDeliveryResponse(
79
79
  root: Annotated[
80
80
  ValidateContentDeliveryResponse1 | ValidateContentDeliveryResponse2,
81
81
  Field(
82
- description='Response payload with per-record verdicts and optional feature breakdown',
83
- title='Validate Content Delivery Response',
82
+ description="Response payload with per-record verdicts and optional feature breakdown",
83
+ title="Validate Content Delivery Response",
84
84
  ),
85
85
  ]
@@ -0,0 +1,54 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/account.json
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field
12
+
13
+ from . import ext as ext_1
14
+
15
+
16
+ class CreditLimit(AdCPBaseModel):
17
+ amount: Annotated[float, Field(ge=0.0)]
18
+ currency: Annotated[str, Field(pattern="^[A-Z]{3}$")]
19
+
20
+
21
+ class Status(Enum):
22
+ active = "active"
23
+ suspended = "suspended"
24
+ closed = "closed"
25
+
26
+
27
+ class Account(AdCPBaseModel):
28
+ model_config = ConfigDict(
29
+ extra="forbid",
30
+ )
31
+ account_id: Annotated[str, Field(description="Unique identifier for this account")]
32
+ advertiser: Annotated[
33
+ str | None, Field(description="The advertiser whose rates apply to this account")
34
+ ] = None
35
+ billing_proxy: Annotated[
36
+ str | None,
37
+ Field(
38
+ description="Optional intermediary who receives invoices on behalf of the advertiser (e.g., agency)"
39
+ ),
40
+ ] = None
41
+ credit_limit: Annotated[
42
+ CreditLimit | None, Field(description="Maximum outstanding balance allowed")
43
+ ] = None
44
+ ext: ext_1.ExtensionObject | None = None
45
+ name: Annotated[
46
+ str, Field(description="Human-readable account name (e.g., 'Coke', 'Coke c/o Publicis')")
47
+ ]
48
+ payment_terms: Annotated[
49
+ str | None, Field(description="Payment terms (e.g., 'net_30', 'prepay')")
50
+ ] = None
51
+ rate_card: Annotated[
52
+ str | None, Field(description="Identifier for the rate card applied to this account")
53
+ ] = None
54
+ status: Annotated[Status, Field(description="Account status")]
@@ -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
  ]