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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +5 -5
  3. adcp/__main__.py +4 -4
  4. adcp/adagents.py +5 -9
  5. adcp/client.py +14 -12
  6. adcp/protocols/a2a.py +3 -3
  7. adcp/protocols/base.py +2 -2
  8. adcp/protocols/mcp.py +3 -3
  9. adcp/server/base.py +6 -10
  10. adcp/server/content_standards.py +17 -49
  11. adcp/server/governance.py +20 -59
  12. adcp/server/mcp_tools.py +8 -4
  13. adcp/server/proposal.py +1 -3
  14. adcp/server/sponsored_intelligence.py +10 -28
  15. adcp/simple.py +10 -10
  16. adcp/types/__init__.py +10 -6
  17. adcp/types/_generated.py +44 -27
  18. adcp/types/base.py +7 -7
  19. adcp/types/generated_poc/{protocols → a2ui}/__init__.py +1 -1
  20. adcp/types/generated_poc/a2ui/component.py +24 -0
  21. adcp/types/generated_poc/a2ui/surface.py +33 -0
  22. adcp/types/generated_poc/account/__init__.py +3 -0
  23. adcp/types/generated_poc/account/list_accounts_request.py +30 -0
  24. adcp/types/generated_poc/account/list_accounts_response.py +30 -0
  25. adcp/types/generated_poc/adagents.py +192 -195
  26. adcp/types/generated_poc/content_standards/artifact.py +69 -69
  27. adcp/types/generated_poc/content_standards/artifact_webhook_payload.py +13 -13
  28. adcp/types/generated_poc/content_standards/calibrate_content_request.py +2 -2
  29. adcp/types/generated_poc/content_standards/calibrate_content_response.py +17 -17
  30. adcp/types/generated_poc/content_standards/content_standards.py +8 -8
  31. adcp/types/generated_poc/content_standards/create_content_standards_request.py +13 -13
  32. adcp/types/generated_poc/content_standards/create_content_standards_response.py +6 -6
  33. adcp/types/generated_poc/content_standards/get_content_standards_request.py +1 -1
  34. adcp/types/generated_poc/content_standards/get_content_standards_response.py +4 -4
  35. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_request.py +14 -14
  36. adcp/types/generated_poc/content_standards/get_media_buy_artifacts_response.py +30 -30
  37. adcp/types/generated_poc/content_standards/list_content_standards_request.py +4 -4
  38. adcp/types/generated_poc/content_standards/list_content_standards_response.py +5 -5
  39. adcp/types/generated_poc/content_standards/update_content_standards_request.py +14 -14
  40. adcp/types/generated_poc/content_standards/update_content_standards_response.py +4 -4
  41. adcp/types/generated_poc/content_standards/validate_content_delivery_request.py +13 -13
  42. adcp/types/generated_poc/content_standards/validate_content_delivery_response.py +16 -16
  43. adcp/types/generated_poc/core/account.py +54 -0
  44. adcp/types/generated_poc/core/activation_key.py +8 -8
  45. adcp/types/generated_poc/core/assets/audio_asset.py +37 -8
  46. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  47. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  48. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  49. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  50. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  51. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  52. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  53. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  54. adcp/types/generated_poc/core/assets/video_asset.py +126 -10
  55. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  56. adcp/types/generated_poc/core/async_response_data.py +2 -2
  57. adcp/types/generated_poc/core/brand_manifest.py +66 -66
  58. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  59. adcp/types/generated_poc/core/context.py +1 -1
  60. adcp/types/generated_poc/core/creative_asset.py +12 -12
  61. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  62. adcp/types/generated_poc/core/creative_filters.py +23 -17
  63. adcp/types/generated_poc/core/creative_manifest.py +4 -4
  64. adcp/types/generated_poc/core/creative_policy.py +4 -4
  65. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  66. adcp/types/generated_poc/core/deployment.py +20 -20
  67. adcp/types/generated_poc/core/destination.py +11 -11
  68. adcp/types/generated_poc/core/error.py +6 -6
  69. adcp/types/generated_poc/core/ext.py +1 -1
  70. adcp/types/generated_poc/core/format.py +49 -124
  71. adcp/types/generated_poc/core/format_id.py +5 -5
  72. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  73. adcp/types/generated_poc/core/identifier.py +2 -2
  74. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  75. adcp/types/generated_poc/core/measurement.py +8 -8
  76. adcp/types/generated_poc/core/media_buy.py +12 -8
  77. adcp/types/generated_poc/core/media_buy_features.py +3 -3
  78. adcp/types/generated_poc/core/offering.py +9 -9
  79. adcp/types/generated_poc/core/package.py +8 -8
  80. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  81. adcp/types/generated_poc/core/placement.py +4 -4
  82. adcp/types/generated_poc/core/pricing_option.py +1 -1
  83. adcp/types/generated_poc/core/product.py +27 -21
  84. adcp/types/generated_poc/core/product_allocation.py +5 -5
  85. adcp/types/generated_poc/core/product_filters.py +27 -27
  86. adcp/types/generated_poc/core/promoted_offerings.py +18 -18
  87. adcp/types/generated_poc/core/promoted_products.py +2 -2
  88. adcp/types/generated_poc/core/property.py +10 -10
  89. adcp/types/generated_poc/core/property_id.py +4 -4
  90. adcp/types/generated_poc/core/property_list_ref.py +4 -4
  91. adcp/types/generated_poc/core/property_tag.py +4 -4
  92. adcp/types/generated_poc/core/proposal.py +13 -13
  93. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  94. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  95. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  96. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  97. adcp/types/generated_poc/core/reporting_webhook.py +10 -10
  98. adcp/types/generated_poc/core/response.py +4 -4
  99. adcp/types/generated_poc/core/signal_filters.py +5 -5
  100. adcp/types/generated_poc/core/start_timing.py +3 -3
  101. adcp/types/generated_poc/core/sub_asset.py +14 -14
  102. adcp/types/generated_poc/core/targeting.py +17 -10
  103. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  104. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  105. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  106. adcp/types/generated_poc/creative/preview_creative_response.py +28 -28
  107. adcp/types/generated_poc/creative/preview_render.py +25 -25
  108. adcp/types/generated_poc/enums/adcp_domain.py +4 -4
  109. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  110. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  111. adcp/types/generated_poc/enums/available_metric.py +9 -9
  112. adcp/types/generated_poc/enums/channels.py +19 -19
  113. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  114. adcp/types/generated_poc/enums/creative_action.py +5 -5
  115. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  116. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  117. adcp/types/generated_poc/enums/creative_status.py +5 -5
  118. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  119. adcp/types/generated_poc/enums/daast_version.py +2 -2
  120. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  121. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  122. adcp/types/generated_poc/enums/feed_format.py +3 -3
  123. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  124. adcp/types/generated_poc/enums/format_category.py +7 -7
  125. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  126. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  127. adcp/types/generated_poc/enums/geo_level.py +4 -4
  128. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  129. adcp/types/generated_poc/enums/http_method.py +2 -2
  130. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  131. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  132. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  133. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  134. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  135. adcp/types/generated_poc/enums/metric_type.py +8 -8
  136. adcp/types/generated_poc/enums/metro_system.py +5 -5
  137. adcp/types/generated_poc/enums/notification_type.py +4 -4
  138. adcp/types/generated_poc/enums/pacing.py +3 -3
  139. adcp/types/generated_poc/enums/postal_system.py +9 -9
  140. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  141. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  142. adcp/types/generated_poc/enums/property_type.py +8 -8
  143. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  144. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  145. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  146. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  147. adcp/types/generated_poc/enums/task_status.py +9 -9
  148. adcp/types/generated_poc/enums/task_type.py +11 -12
  149. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  150. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  151. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  152. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  153. adcp/types/generated_poc/enums/vast_version.py +5 -5
  154. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  155. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  156. adcp/types/generated_poc/extensions/extension_meta.py +14 -14
  157. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  158. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  159. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  160. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  161. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  162. adcp/types/generated_poc/media_buy/create_media_buy_request.py +27 -21
  163. adcp/types/generated_poc/media_buy/create_media_buy_response.py +15 -8
  164. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  165. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  166. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  167. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  168. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  169. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  170. adcp/types/generated_poc/media_buy/get_products_response.py +5 -5
  171. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  172. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  173. adcp/types/generated_poc/media_buy/list_creatives_request.py +23 -23
  174. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -49
  175. adcp/types/generated_poc/media_buy/package_request.py +8 -8
  176. adcp/types/generated_poc/media_buy/package_update.py +16 -16
  177. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  178. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  179. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  180. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  181. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  182. adcp/types/generated_poc/media_buy/sync_creatives_request.py +14 -8
  183. adcp/types/generated_poc/media_buy/sync_creatives_response.py +33 -29
  184. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  185. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  186. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  187. adcp/types/generated_poc/media_buy/update_media_buy_request.py +14 -14
  188. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  189. adcp/types/generated_poc/pricing_options/cpc_option.py +13 -26
  190. adcp/types/generated_poc/pricing_options/cpcv_option.py +13 -26
  191. adcp/types/generated_poc/pricing_options/cpm_option.py +13 -20
  192. adcp/types/generated_poc/pricing_options/cpp_option.py +19 -32
  193. adcp/types/generated_poc/pricing_options/cpv_option.py +19 -32
  194. adcp/types/generated_poc/pricing_options/flat_rate_option.py +23 -36
  195. adcp/types/generated_poc/pricing_options/price_guidance.py +26 -0
  196. adcp/types/generated_poc/pricing_options/vcpm_option.py +13 -26
  197. adcp/types/generated_poc/property/base_property_source.py +15 -15
  198. adcp/types/generated_poc/property/create_property_list_request.py +4 -4
  199. adcp/types/generated_poc/property/create_property_list_response.py +3 -3
  200. adcp/types/generated_poc/property/delete_property_list_request.py +2 -2
  201. adcp/types/generated_poc/property/delete_property_list_response.py +3 -3
  202. adcp/types/generated_poc/property/feature_requirement.py +8 -8
  203. adcp/types/generated_poc/property/get_property_list_request.py +5 -5
  204. adcp/types/generated_poc/property/get_property_list_response.py +11 -11
  205. adcp/types/generated_poc/property/list_property_lists_request.py +5 -5
  206. adcp/types/generated_poc/property/list_property_lists_response.py +8 -8
  207. adcp/types/generated_poc/property/property_error.py +10 -10
  208. adcp/types/generated_poc/property/property_feature.py +4 -4
  209. adcp/types/generated_poc/property/property_feature_definition.py +18 -18
  210. adcp/types/generated_poc/property/property_list.py +11 -11
  211. adcp/types/generated_poc/property/property_list_changed_webhook.py +11 -11
  212. adcp/types/generated_poc/property/property_list_filters.py +7 -7
  213. adcp/types/generated_poc/property/update_property_list_request.py +8 -8
  214. adcp/types/generated_poc/property/update_property_list_response.py +2 -2
  215. adcp/types/generated_poc/protocol/get_adcp_capabilities_request.py +8 -6
  216. adcp/types/generated_poc/protocol/get_adcp_capabilities_response.py +59 -58
  217. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  218. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  219. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  220. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  221. adcp/types/generated_poc/sponsored_intelligence/si_capabilities.py +45 -30
  222. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_request.py +4 -4
  223. adcp/types/generated_poc/sponsored_intelligence/si_get_offering_response.py +23 -23
  224. adcp/types/generated_poc/sponsored_intelligence/si_identity.py +16 -16
  225. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_request.py +5 -5
  226. adcp/types/generated_poc/sponsored_intelligence/si_initiate_session_response.py +7 -7
  227. adcp/types/generated_poc/sponsored_intelligence/si_send_message_request.py +11 -11
  228. adcp/types/generated_poc/sponsored_intelligence/si_send_message_response.py +37 -23
  229. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_request.py +17 -17
  230. adcp/types/generated_poc/sponsored_intelligence/si_terminate_session_response.py +15 -15
  231. adcp/types/generated_poc/sponsored_intelligence/si_ui_element.py +11 -11
  232. adcp/utils/format_assets.py +32 -32
  233. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/METADATA +10 -5
  234. adcp-3.2.0.dist-info/RECORD +268 -0
  235. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -38
  236. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -84
  237. adcp/types/generated_poc/protocols/adcp_extension.py +0 -50
  238. adcp-3.1.0.dist-info/RECORD +0 -264
  239. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/WHEEL +0 -0
  240. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/entry_points.txt +0 -0
  241. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/licenses/LICENSE +0 -0
  242. {adcp-3.1.0.dist-info → adcp-3.2.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/cpp_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,79 +9,66 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
+ from . import price_guidance as price_guidance_1
13
+
12
14
 
13
15
  class Parameters(AdCPBaseModel):
14
16
  model_config = ConfigDict(
15
- extra='allow',
17
+ extra="allow",
16
18
  )
17
19
  demographic: Annotated[
18
20
  str,
19
21
  Field(
20
- description='Target demographic in Nielsen format (P18-49, M25-54, W35+, etc.)',
21
- pattern='^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$',
22
+ description="Target demographic in Nielsen format (P18-49, M25-54, W35+, etc.)",
23
+ pattern="^[PMWAC][0-9]{2}(-[0-9]{2}|\\+)$",
22
24
  ),
23
25
  ]
24
- min_points: Annotated[float | None, Field(description='Minimum GRPs/TRPs required', ge=0.0)] = (
26
+ min_points: Annotated[float | None, Field(description="Minimum GRPs/TRPs required", ge=0.0)] = (
25
27
  None
26
28
  )
27
29
 
28
30
 
29
- class PriceGuidance(AdCPBaseModel):
30
- p25: Annotated[
31
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
32
- ] = None
33
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
34
- p75: Annotated[
35
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
36
- ] = None
37
- p90: Annotated[
38
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
39
- ] = None
40
-
41
-
42
31
  class CppPricingOption(AdCPBaseModel):
43
32
  model_config = ConfigDict(
44
- extra='allow',
33
+ extra="allow",
45
34
  )
46
35
  currency: Annotated[
47
36
  str,
48
37
  Field(
49
- description='ISO 4217 currency code',
50
- examples=['USD', 'EUR', 'GBP', 'JPY'],
51
- pattern='^[A-Z]{3}$',
38
+ description="ISO 4217 currency code",
39
+ examples=["USD", "EUR", "GBP", "JPY"],
40
+ pattern="^[A-Z]{3}$",
52
41
  ),
53
42
  ]
54
43
  fixed_price: Annotated[
55
44
  float | None,
56
45
  Field(
57
- description='Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.',
46
+ description="Fixed price per rating point. If present, this is fixed pricing. If absent, auction-based.",
58
47
  ge=0.0,
59
48
  ),
60
49
  ] = None
61
50
  floor_price: Annotated[
62
51
  float | None,
63
52
  Field(
64
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
53
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
65
54
  ge=0.0,
66
55
  ),
67
56
  ] = None
68
57
  min_spend_per_package: Annotated[
69
58
  float | None,
70
59
  Field(
71
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
60
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
72
61
  ge=0.0,
73
62
  ),
74
63
  ] = None
75
64
  parameters: Annotated[
76
- Parameters, Field(description='CPP-specific parameters for demographic targeting')
65
+ Parameters, Field(description="CPP-specific parameters for demographic targeting")
77
66
  ]
78
67
  price_guidance: Annotated[
79
- PriceGuidance | None,
80
- Field(
81
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
82
- ),
68
+ price_guidance_1.PriceGuidance | None,
69
+ Field(description="Optional pricing guidance for auction-based bidding"),
83
70
  ] = None
84
- pricing_model: Annotated[Literal['cpp'], Field(description='Cost per Gross Rating Point')]
71
+ pricing_model: Annotated[Literal["cpp"], Field(description="Cost per Gross Rating Point")]
85
72
  pricing_option_id: Annotated[
86
- str, Field(description='Unique identifier for this pricing option within the product')
73
+ str, Field(description="Unique identifier for this pricing option within the product")
87
74
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/cpv_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,12 +9,14 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field, RootModel
11
11
 
12
+ from . import price_guidance as price_guidance_1
13
+
12
14
 
13
15
  class ViewThreshold(RootModel[float]):
14
16
  root: Annotated[
15
17
  float,
16
18
  Field(
17
- description='Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)',
19
+ description="Percentage completion threshold (0.0 to 1.0, e.g., 0.5 = 50%)",
18
20
  ge=0.0,
19
21
  le=1.0,
20
22
  ),
@@ -23,74 +25,59 @@ class ViewThreshold(RootModel[float]):
23
25
 
24
26
  class ViewThreshold1(AdCPBaseModel):
25
27
  model_config = ConfigDict(
26
- extra='allow',
28
+ extra="allow",
27
29
  )
28
- duration_seconds: Annotated[int, Field(description='Seconds of viewing required', ge=1)]
30
+ duration_seconds: Annotated[int, Field(description="Seconds of viewing required", ge=1)]
29
31
 
30
32
 
31
33
  class Parameters(AdCPBaseModel):
32
34
  model_config = ConfigDict(
33
- extra='allow',
35
+ extra="allow",
34
36
  )
35
37
  view_threshold: ViewThreshold | ViewThreshold1
36
38
 
37
39
 
38
- class PriceGuidance(AdCPBaseModel):
39
- p25: Annotated[
40
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
41
- ] = None
42
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
43
- p75: Annotated[
44
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
45
- ] = None
46
- p90: Annotated[
47
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
48
- ] = None
49
-
50
-
51
40
  class CpvPricingOption(AdCPBaseModel):
52
41
  model_config = ConfigDict(
53
- extra='allow',
42
+ extra="allow",
54
43
  )
55
44
  currency: Annotated[
56
45
  str,
57
46
  Field(
58
- description='ISO 4217 currency code',
59
- examples=['USD', 'EUR', 'GBP', 'JPY'],
60
- pattern='^[A-Z]{3}$',
47
+ description="ISO 4217 currency code",
48
+ examples=["USD", "EUR", "GBP", "JPY"],
49
+ pattern="^[A-Z]{3}$",
61
50
  ),
62
51
  ]
63
52
  fixed_price: Annotated[
64
53
  float | None,
65
54
  Field(
66
- description='Fixed price per view. If present, this is fixed pricing. If absent, auction-based.',
55
+ description="Fixed price per view. If present, this is fixed pricing. If absent, auction-based.",
67
56
  ge=0.0,
68
57
  ),
69
58
  ] = None
70
59
  floor_price: Annotated[
71
60
  float | None,
72
61
  Field(
73
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
62
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
74
63
  ge=0.0,
75
64
  ),
76
65
  ] = None
77
66
  min_spend_per_package: Annotated[
78
67
  float | None,
79
68
  Field(
80
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
69
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
81
70
  ge=0.0,
82
71
  ),
83
72
  ] = None
84
73
  parameters: Annotated[
85
- Parameters, Field(description='CPV-specific parameters defining the view threshold')
74
+ Parameters, Field(description="CPV-specific parameters defining the view threshold")
86
75
  ]
87
76
  price_guidance: Annotated[
88
- PriceGuidance | None,
89
- Field(
90
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
91
- ),
77
+ price_guidance_1.PriceGuidance | None,
78
+ Field(description="Optional pricing guidance for auction-based bidding"),
92
79
  ] = None
93
- pricing_model: Annotated[Literal['cpv'], Field(description='Cost per view at threshold')]
80
+ pricing_model: Annotated[Literal["cpv"], Field(description="Cost per view at threshold")]
94
81
  pricing_option_id: Annotated[
95
- str, Field(description='Unique identifier for this pricing option within the product')
82
+ str, Field(description="Unique identifier for this pricing option within the product")
96
83
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/flat_rate_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,91 +9,78 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
+ from . import price_guidance as price_guidance_1
13
+
12
14
 
13
15
  class Parameters(AdCPBaseModel):
14
16
  model_config = ConfigDict(
15
- extra='allow',
17
+ extra="allow",
16
18
  )
17
- daypart: Annotated[str | None, Field(description='Specific daypart for time-based pricing')] = (
19
+ daypart: Annotated[str | None, Field(description="Specific daypart for time-based pricing")] = (
18
20
  None
19
21
  )
20
22
  duration_hours: Annotated[
21
- float | None, Field(description='Duration in hours for time-based pricing', ge=0.0)
23
+ float | None, Field(description="Duration in hours for time-based pricing", ge=0.0)
22
24
  ] = None
23
25
  estimated_impressions: Annotated[
24
- int | None, Field(description='Estimated impressions (informational)', ge=0)
26
+ int | None, Field(description="Estimated impressions (informational)", ge=0)
25
27
  ] = None
26
28
  loop_duration_seconds: Annotated[
27
- int | None, Field(description='Duration of ad loop rotation in seconds', ge=1)
29
+ int | None, Field(description="Duration of ad loop rotation in seconds", ge=1)
28
30
  ] = None
29
- min_plays_per_hour: Annotated[int | None, Field(description='Minimum plays per hour', ge=0)] = (
31
+ min_plays_per_hour: Annotated[int | None, Field(description="Minimum plays per hour", ge=0)] = (
30
32
  None
31
33
  )
32
34
  sov_percentage: Annotated[
33
- float | None, Field(description='Guaranteed share of voice (0-100)', ge=0.0, le=100.0)
34
- ] = None
35
- venue_package: Annotated[str | None, Field(description='Named venue package identifier')] = None
36
-
37
-
38
- class PriceGuidance(AdCPBaseModel):
39
- p25: Annotated[
40
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
41
- ] = None
42
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
43
- p75: Annotated[
44
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
45
- ] = None
46
- p90: Annotated[
47
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
35
+ float | None, Field(description="Guaranteed share of voice (0-100)", ge=0.0, le=100.0)
48
36
  ] = None
37
+ venue_package: Annotated[str | None, Field(description="Named venue package identifier")] = None
49
38
 
50
39
 
51
40
  class FlatRatePricingOption(AdCPBaseModel):
52
41
  model_config = ConfigDict(
53
- extra='allow',
42
+ extra="allow",
54
43
  )
55
44
  currency: Annotated[
56
45
  str,
57
46
  Field(
58
- description='ISO 4217 currency code',
59
- examples=['USD', 'EUR', 'GBP', 'JPY'],
60
- pattern='^[A-Z]{3}$',
47
+ description="ISO 4217 currency code",
48
+ examples=["USD", "EUR", "GBP", "JPY"],
49
+ pattern="^[A-Z]{3}$",
61
50
  ),
62
51
  ]
63
52
  fixed_price: Annotated[
64
53
  float | None,
65
54
  Field(
66
- description='Flat rate cost. If present, this is fixed pricing. If absent, auction-based.',
55
+ description="Flat rate cost. If present, this is fixed pricing. If absent, auction-based.",
67
56
  ge=0.0,
68
57
  ),
69
58
  ] = None
70
59
  floor_price: Annotated[
71
60
  float | None,
72
61
  Field(
73
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
62
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
74
63
  ge=0.0,
75
64
  ),
76
65
  ] = None
77
66
  min_spend_per_package: Annotated[
78
67
  float | None,
79
68
  Field(
80
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
69
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
81
70
  ge=0.0,
82
71
  ),
83
72
  ] = None
84
73
  parameters: Annotated[
85
74
  Parameters | None,
86
- Field(description='Flat rate parameters for DOOH and time-based campaigns'),
75
+ Field(description="Flat rate parameters for DOOH and time-based campaigns"),
87
76
  ] = None
88
77
  price_guidance: Annotated[
89
- PriceGuidance | None,
90
- Field(
91
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
92
- ),
78
+ price_guidance_1.PriceGuidance | None,
79
+ Field(description="Optional pricing guidance for auction-based bidding"),
93
80
  ] = None
94
81
  pricing_model: Annotated[
95
- Literal['flat_rate'], Field(description='Fixed cost regardless of delivery volume')
82
+ Literal["flat_rate"], Field(description="Fixed cost regardless of delivery volume")
96
83
  ]
97
84
  pricing_option_id: Annotated[
98
- str, Field(description='Unique identifier for this pricing option within the product')
85
+ str, Field(description="Unique identifier for this pricing option within the product")
99
86
  ]
@@ -0,0 +1,26 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: pricing_options/price_guidance.json
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import ConfigDict, Field
11
+
12
+
13
+ class PriceGuidance(AdCPBaseModel):
14
+ model_config = ConfigDict(
15
+ extra="allow",
16
+ )
17
+ p25: Annotated[
18
+ float | None, Field(description="25th percentile of recent winning bids", ge=0.0)
19
+ ] = None
20
+ p50: Annotated[float | None, Field(description="Median of recent winning bids", ge=0.0)] = None
21
+ p75: Annotated[
22
+ float | None, Field(description="75th percentile of recent winning bids", ge=0.0)
23
+ ] = None
24
+ p90: Annotated[
25
+ float | None, Field(description="90th percentile of recent winning bids", ge=0.0)
26
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: pricing_options/vcpm_option.json
3
- # timestamp: 2026-01-26T11:40:01+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,62 +9,49 @@ from typing import Annotated, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
-
13
- class PriceGuidance(AdCPBaseModel):
14
- p25: Annotated[
15
- float | None, Field(description='25th percentile of recent winning bids', ge=0.0)
16
- ] = None
17
- p50: Annotated[float | None, Field(description='Median of recent winning bids', ge=0.0)] = None
18
- p75: Annotated[
19
- float | None, Field(description='75th percentile of recent winning bids', ge=0.0)
20
- ] = None
21
- p90: Annotated[
22
- float | None, Field(description='90th percentile of recent winning bids', ge=0.0)
23
- ] = None
12
+ from . import price_guidance as price_guidance_1
24
13
 
25
14
 
26
15
  class VcpmPricingOption(AdCPBaseModel):
27
16
  model_config = ConfigDict(
28
- extra='allow',
17
+ extra="allow",
29
18
  )
30
19
  currency: Annotated[
31
20
  str,
32
21
  Field(
33
- description='ISO 4217 currency code',
34
- examples=['USD', 'EUR', 'GBP', 'JPY'],
35
- pattern='^[A-Z]{3}$',
22
+ description="ISO 4217 currency code",
23
+ examples=["USD", "EUR", "GBP", "JPY"],
24
+ pattern="^[A-Z]{3}$",
36
25
  ),
37
26
  ]
38
27
  fixed_price: Annotated[
39
28
  float | None,
40
29
  Field(
41
- description='Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.',
30
+ description="Fixed price per unit. If present, this is fixed pricing. If absent, auction-based.",
42
31
  ge=0.0,
43
32
  ),
44
33
  ] = None
45
34
  floor_price: Annotated[
46
35
  float | None,
47
36
  Field(
48
- description='Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.',
37
+ description="Minimum acceptable bid for auction pricing (mutually exclusive with fixed_price). Bids below this value will be rejected.",
49
38
  ge=0.0,
50
39
  ),
51
40
  ] = None
52
41
  min_spend_per_package: Annotated[
53
42
  float | None,
54
43
  Field(
55
- description='Minimum spend requirement per package using this pricing option, in the specified currency',
44
+ description="Minimum spend requirement per package using this pricing option, in the specified currency",
56
45
  ge=0.0,
57
46
  ),
58
47
  ] = None
59
48
  price_guidance: Annotated[
60
- PriceGuidance | None,
61
- Field(
62
- description='Optional pricing guidance for auction-based bidding. Helps buyers calibrate bids with historical percentiles.'
63
- ),
49
+ price_guidance_1.PriceGuidance | None,
50
+ Field(description="Optional pricing guidance for auction-based bidding"),
64
51
  ] = None
65
52
  pricing_model: Annotated[
66
- Literal['vcpm'], Field(description='Cost per 1,000 viewable impressions (MRC standard)')
53
+ Literal["vcpm"], Field(description="Cost per 1,000 viewable impressions (MRC standard)")
67
54
  ]
68
55
  pricing_option_id: Annotated[
69
- str, Field(description='Unique identifier for this pricing option within the product')
56
+ str, Field(description="Unique identifier for this pricing option within the product")
70
57
  ]
@@ -14,18 +14,18 @@ from ..core import identifier, property_id, property_tag
14
14
 
15
15
  class BasePropertySource1(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='forbid',
17
+ extra="forbid",
18
18
  )
19
19
  publisher_domain: Annotated[
20
20
  str,
21
21
  Field(
22
22
  description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
23
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
23
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
24
24
  ),
25
25
  ]
26
26
  selection_type: Annotated[
27
- Literal['publisher_tags'],
28
- Field(description='Discriminator indicating selection by property tags within a publisher'),
27
+ Literal["publisher_tags"],
28
+ Field(description="Discriminator indicating selection by property tags within a publisher"),
29
29
  ]
30
30
  tags: Annotated[
31
31
  list[property_tag.PropertyTag],
@@ -38,7 +38,7 @@ class BasePropertySource1(AdCPBaseModel):
38
38
 
39
39
  class BasePropertySource2(AdCPBaseModel):
40
40
  model_config = ConfigDict(
41
- extra='forbid',
41
+ extra="forbid",
42
42
  )
43
43
  property_ids: Annotated[
44
44
  list[property_id.PropertyId],
@@ -48,28 +48,28 @@ class BasePropertySource2(AdCPBaseModel):
48
48
  str,
49
49
  Field(
50
50
  description="Domain where publisher's adagents.json is hosted (e.g., 'raptive.com')",
51
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
51
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
52
52
  ),
53
53
  ]
54
54
  selection_type: Annotated[
55
- Literal['publisher_ids'],
55
+ Literal["publisher_ids"],
56
56
  Field(
57
- description='Discriminator indicating selection by specific property IDs within a publisher'
57
+ description="Discriminator indicating selection by specific property IDs within a publisher"
58
58
  ),
59
59
  ]
60
60
 
61
61
 
62
62
  class BasePropertySource3(AdCPBaseModel):
63
63
  model_config = ConfigDict(
64
- extra='forbid',
64
+ extra="forbid",
65
65
  )
66
66
  identifiers: Annotated[
67
67
  list[identifier.Identifier],
68
- Field(description='Direct property identifiers (domains, app IDs, etc.)', min_length=1),
68
+ Field(description="Direct property identifiers (domains, app IDs, etc.)", min_length=1),
69
69
  ]
70
70
  selection_type: Annotated[
71
- Literal['identifiers'],
72
- Field(description='Discriminator indicating selection by direct identifiers'),
71
+ Literal["identifiers"],
72
+ Field(description="Discriminator indicating selection by direct identifiers"),
73
73
  ]
74
74
 
75
75
 
@@ -79,8 +79,8 @@ class BasePropertySource(
79
79
  root: Annotated[
80
80
  BasePropertySource1 | BasePropertySource2 | BasePropertySource3,
81
81
  Field(
82
- description='A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.',
83
- discriminator='selection_type',
84
- title='Base Property Source',
82
+ description="A source of properties for a property list. Supports three selection patterns: publisher with tags, publisher with property IDs, or direct identifiers.",
83
+ discriminator="selection_type",
84
+ title="Base Property Source",
85
85
  ),
86
86
  ]
@@ -17,7 +17,7 @@ from . import base_property_source, property_list_filters
17
17
 
18
18
  class CreatePropertyListRequest(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='forbid',
20
+ extra="forbid",
21
21
  )
22
22
  base_properties: Annotated[
23
23
  list[base_property_source.BasePropertySource] | None,
@@ -28,7 +28,7 @@ class CreatePropertyListRequest(AdCPBaseModel):
28
28
  brand_manifest: Annotated[
29
29
  brand_manifest_1.BrandManifest | None,
30
30
  Field(
31
- description='Brand identity and requirements. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.).'
31
+ description="Brand identity and requirements. When provided, the agent automatically applies appropriate rules based on brand characteristics (industry, target_audience, etc.)."
32
32
  ),
33
33
  ] = None
34
34
  context: context_1.ContextObject | None = None
@@ -38,6 +38,6 @@ class CreatePropertyListRequest(AdCPBaseModel):
38
38
  ext: ext_1.ExtensionObject | None = None
39
39
  filters: Annotated[
40
40
  property_list_filters.PropertyListFilters | None,
41
- Field(description='Dynamic filters to apply when resolving the list'),
41
+ Field(description="Dynamic filters to apply when resolving the list"),
42
42
  ] = None
43
- name: Annotated[str, Field(description='Human-readable name for the list')]
43
+ name: Annotated[str, Field(description="Human-readable name for the list")]
@@ -15,13 +15,13 @@ from . import property_list
15
15
 
16
16
  class CreatePropertyListResponse(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='forbid',
18
+ extra="forbid",
19
19
  )
20
20
  auth_token: Annotated[
21
21
  str,
22
22
  Field(
23
- description='Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time.'
23
+ description="Token that can be shared with sellers to authorize fetching this list. Store this - it is only returned at creation time."
24
24
  ),
25
25
  ]
26
26
  ext: ext_1.ExtensionObject | None = None
27
- list: Annotated[property_list.PropertyList, Field(description='The created property list')]
27
+ list: Annotated[property_list.PropertyList, Field(description="The created property list")]
@@ -15,8 +15,8 @@ from ..core import ext as ext_1
15
15
 
16
16
  class DeletePropertyListRequest(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='forbid',
18
+ extra="forbid",
19
19
  )
20
20
  context: context_1.ContextObject | None = None
21
21
  ext: ext_1.ExtensionObject | None = None
22
- list_id: Annotated[str, Field(description='ID of the property list to delete')]
22
+ list_id: Annotated[str, Field(description="ID of the property list to delete")]
@@ -14,8 +14,8 @@ from ..core import ext as ext_1
14
14
 
15
15
  class DeletePropertyListResponse(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='forbid',
17
+ extra="forbid",
18
18
  )
19
- deleted: Annotated[bool, Field(description='Whether the list was successfully deleted')]
19
+ deleted: Annotated[bool, Field(description="Whether the list was successfully deleted")]
20
20
  ext: ext_1.ExtensionObject | None = None
21
- list_id: Annotated[str, Field(description='ID of the deleted list')]
21
+ list_id: Annotated[str, Field(description="ID of the deleted list")]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: property/feature_requirement.json
3
- # timestamp: 2026-01-25T21:17:54+00:00
3
+ # timestamp: 2026-02-02T17:45:21+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,20 +12,20 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
 
14
14
  class IfNotCovered(Enum):
15
- exclude = 'exclude'
16
- include = 'include'
15
+ exclude = "exclude"
16
+ include = "include"
17
17
 
18
18
 
19
19
  class FeatureRequirement(AdCPBaseModel):
20
20
  model_config = ConfigDict(
21
- extra='forbid',
21
+ extra="forbid",
22
22
  )
23
23
  allowed_values: Annotated[
24
24
  list[Any] | None,
25
- Field(description='Values that pass the requirement (for binary/categorical features)'),
25
+ Field(description="Values that pass the requirement (for binary/categorical features)"),
26
26
  ] = None
27
27
  feature_id: Annotated[
28
- str, Field(description='Feature to evaluate (discovered via list_property_features)')
28
+ str, Field(description="Feature to evaluate (discovered via get_adcp_capabilities)")
29
29
  ]
30
30
  if_not_covered: Annotated[
31
31
  IfNotCovered | None,
@@ -34,9 +34,9 @@ class FeatureRequirement(AdCPBaseModel):
34
34
  ),
35
35
  ] = IfNotCovered.exclude
36
36
  max_value: Annotated[
37
- float | None, Field(description='Maximum numeric value allowed (for quantitative features)')
37
+ float | None, Field(description="Maximum numeric value allowed (for quantitative features)")
38
38
  ] = None
39
39
  min_value: Annotated[
40
40
  float | None,
41
- Field(description='Minimum numeric value required (for quantitative features)'),
41
+ Field(description="Minimum numeric value required (for quantitative features)"),
42
42
  ] = None