adcp 2.18.0__py3-none-any.whl → 2.19.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. adcp/__init__.py +1 -1
  2. adcp/protocols/mcp.py +3 -1
  3. adcp/types/_ergonomic.py +0 -4
  4. adcp/types/_generated.py +85 -4
  5. adcp/types/generated_poc/adagents.py +239 -149
  6. adcp/types/generated_poc/core/activation_key.py +8 -8
  7. adcp/types/generated_poc/core/assets/audio_asset.py +5 -5
  8. adcp/types/generated_poc/core/assets/css_asset.py +2 -2
  9. adcp/types/generated_poc/core/assets/daast_asset.py +18 -18
  10. adcp/types/generated_poc/core/assets/html_asset.py +2 -2
  11. adcp/types/generated_poc/core/assets/image_asset.py +6 -6
  12. adcp/types/generated_poc/core/assets/javascript_asset.py +3 -3
  13. adcp/types/generated_poc/core/assets/text_asset.py +2 -2
  14. adcp/types/generated_poc/core/assets/url_asset.py +3 -3
  15. adcp/types/generated_poc/core/assets/vast_asset.py +18 -18
  16. adcp/types/generated_poc/core/assets/video_asset.py +7 -7
  17. adcp/types/generated_poc/core/assets/webhook_asset.py +9 -9
  18. adcp/types/generated_poc/core/async_response_data.py +2 -2
  19. adcp/types/generated_poc/core/brand_manifest.py +55 -55
  20. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  21. adcp/types/generated_poc/core/context.py +1 -1
  22. adcp/types/generated_poc/core/creative_asset.py +13 -13
  23. adcp/types/generated_poc/core/creative_assignment.py +3 -3
  24. adcp/types/generated_poc/core/creative_filters.py +19 -19
  25. adcp/types/generated_poc/core/creative_manifest.py +2 -2
  26. adcp/types/generated_poc/core/creative_policy.py +4 -4
  27. adcp/types/generated_poc/core/delivery_metrics.py +32 -32
  28. adcp/types/generated_poc/core/deployment.py +20 -20
  29. adcp/types/generated_poc/core/destination.py +11 -11
  30. adcp/types/generated_poc/core/error.py +6 -6
  31. adcp/types/generated_poc/core/ext.py +1 -1
  32. adcp/types/generated_poc/core/format.py +67 -66
  33. adcp/types/generated_poc/core/format_id.py +5 -5
  34. adcp/types/generated_poc/core/frequency_cap.py +2 -2
  35. adcp/types/generated_poc/core/identifier.py +27 -0
  36. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  37. adcp/types/generated_poc/core/measurement.py +8 -8
  38. adcp/types/generated_poc/core/media_buy.py +7 -7
  39. adcp/types/generated_poc/core/package.py +8 -8
  40. adcp/types/generated_poc/core/performance_feedback.py +18 -18
  41. adcp/types/generated_poc/core/placement.py +4 -4
  42. adcp/types/generated_poc/core/pricing_option.py +2 -2
  43. adcp/types/generated_poc/core/product.py +20 -20
  44. adcp/types/generated_poc/core/product_filters.py +18 -18
  45. adcp/types/generated_poc/core/promoted_offerings.py +20 -20
  46. adcp/types/generated_poc/core/promoted_products.py +2 -2
  47. adcp/types/generated_poc/core/property.py +9 -9
  48. adcp/types/generated_poc/core/property_id.py +4 -4
  49. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  50. adcp/types/generated_poc/core/property_tag.py +4 -4
  51. adcp/types/generated_poc/core/protocol_envelope.py +8 -8
  52. adcp/types/generated_poc/core/publisher_property_selector.py +13 -13
  53. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  54. adcp/types/generated_poc/core/reporting_capabilities.py +8 -8
  55. adcp/types/generated_poc/core/response.py +4 -4
  56. adcp/types/generated_poc/core/signal_filters.py +5 -5
  57. adcp/types/generated_poc/core/start_timing.py +5 -5
  58. adcp/types/generated_poc/core/sub_asset.py +14 -14
  59. adcp/types/generated_poc/core/targeting.py +8 -8
  60. adcp/types/generated_poc/creative/list_creative_formats_request.py +20 -20
  61. adcp/types/generated_poc/creative/list_creative_formats_response.py +5 -5
  62. adcp/types/generated_poc/creative/preview_creative_request.py +24 -24
  63. adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
  64. adcp/types/generated_poc/creative/preview_render.py +25 -25
  65. adcp/types/generated_poc/enums/adcp_domain.py +5 -3
  66. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  67. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  68. adcp/types/generated_poc/enums/available_metric.py +9 -9
  69. adcp/types/generated_poc/enums/channels.py +9 -9
  70. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  71. adcp/types/generated_poc/enums/creative_action.py +5 -5
  72. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  73. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  74. adcp/types/generated_poc/enums/creative_status.py +4 -4
  75. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  76. adcp/types/generated_poc/enums/daast_version.py +2 -2
  77. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  78. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  79. adcp/types/generated_poc/enums/feed_format.py +3 -3
  80. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  81. adcp/types/generated_poc/enums/format_category.py +7 -7
  82. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  83. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  84. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  85. adcp/types/generated_poc/enums/http_method.py +2 -2
  86. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  87. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  88. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  89. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  90. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  91. adcp/types/generated_poc/enums/metric_type.py +8 -8
  92. adcp/types/generated_poc/enums/notification_type.py +4 -4
  93. adcp/types/generated_poc/enums/pacing.py +3 -3
  94. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  95. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  96. adcp/types/generated_poc/enums/property_type.py +7 -7
  97. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  98. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  99. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  100. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  101. adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
  102. adcp/types/generated_poc/enums/task_status.py +9 -9
  103. adcp/types/generated_poc/enums/task_type.py +12 -6
  104. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  105. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  106. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  107. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  108. adcp/types/generated_poc/enums/vast_version.py +5 -5
  109. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  110. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  111. adcp/types/generated_poc/extensions/__init__.py +3 -0
  112. adcp/types/generated_poc/extensions/extension_meta.py +50 -0
  113. adcp/types/generated_poc/media_buy/build_creative_request.py +4 -4
  114. adcp/types/generated_poc/media_buy/build_creative_response.py +6 -6
  115. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +5 -5
  116. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +1 -1
  117. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +5 -5
  118. adcp/types/generated_poc/media_buy/create_media_buy_request.py +25 -25
  119. adcp/types/generated_poc/media_buy/create_media_buy_response.py +7 -7
  120. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +8 -8
  121. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +51 -51
  122. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +6 -6
  123. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +2 -2
  124. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +4 -4
  125. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  126. adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
  127. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +3 -3
  128. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +7 -7
  129. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +9 -9
  130. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +5 -5
  131. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  132. adcp/types/generated_poc/media_buy/list_creatives_response.py +52 -52
  133. adcp/types/generated_poc/media_buy/package_request.py +16 -7
  134. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +19 -19
  135. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +6 -6
  136. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +5 -5
  137. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +1 -1
  138. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +7 -7
  139. adcp/types/generated_poc/media_buy/sync_creatives_request.py +7 -7
  140. adcp/types/generated_poc/media_buy/sync_creatives_response.py +15 -15
  141. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +4 -4
  142. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +1 -1
  143. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +5 -5
  144. adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
  145. adcp/types/generated_poc/media_buy/update_media_buy_response.py +7 -7
  146. adcp/types/generated_poc/pricing_options/cpc_option.py +8 -8
  147. adcp/types/generated_poc/pricing_options/cpcv_option.py +8 -8
  148. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +13 -13
  149. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +8 -8
  150. adcp/types/generated_poc/pricing_options/cpp_option.py +13 -13
  151. adcp/types/generated_poc/pricing_options/cpv_option.py +12 -12
  152. adcp/types/generated_poc/pricing_options/flat_rate_option.py +15 -15
  153. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +13 -13
  154. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +8 -8
  155. adcp/types/generated_poc/property/__init__.py +3 -0
  156. adcp/types/generated_poc/property/base_property_source.py +86 -0
  157. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  158. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  159. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  160. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  161. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  162. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  163. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  164. adcp/types/generated_poc/property/list_property_features_request.py +25 -0
  165. adcp/types/generated_poc/property/list_property_features_response.py +24 -0
  166. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  167. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  168. adcp/types/generated_poc/property/property_error.py +33 -0
  169. adcp/types/generated_poc/property/property_feature.py +22 -0
  170. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  171. adcp/types/generated_poc/property/property_list.py +62 -0
  172. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  173. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  174. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  175. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  176. adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
  177. adcp/types/generated_poc/signals/activate_signal_request.py +3 -3
  178. adcp/types/generated_poc/signals/activate_signal_response.py +6 -6
  179. adcp/types/generated_poc/signals/get_signals_request.py +8 -8
  180. adcp/types/generated_poc/signals/get_signals_response.py +15 -15
  181. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
  182. adcp-2.19.0.dist-info/RECORD +220 -0
  183. adcp-2.18.0.dist-info/RECORD +0 -195
  184. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
  185. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
  186. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
  187. {adcp-2.18.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
@@ -16,23 +16,23 @@ from ..core import product
16
16
 
17
17
 
18
18
  class Reason(Enum):
19
- CLARIFICATION_NEEDED = 'CLARIFICATION_NEEDED'
20
- BUDGET_REQUIRED = 'BUDGET_REQUIRED'
19
+ CLARIFICATION_NEEDED = "CLARIFICATION_NEEDED"
20
+ BUDGET_REQUIRED = "BUDGET_REQUIRED"
21
21
 
22
22
 
23
23
  class GetProductsInputRequired(AdCPBaseModel):
24
24
  model_config = ConfigDict(
25
- extra='allow',
25
+ extra="allow",
26
26
  )
27
27
  context: context_1.ContextObject | None = None
28
28
  ext: ext_1.ExtensionObject | None = None
29
29
  partial_results: Annotated[
30
30
  list[product.Product] | None,
31
- Field(description='Partial product results that may help inform the clarification'),
31
+ Field(description="Partial product results that may help inform the clarification"),
32
32
  ] = None
33
33
  reason: Annotated[
34
- Reason | None, Field(description='Reason code indicating why input is needed')
34
+ Reason | None, Field(description="Reason code indicating why input is needed")
35
35
  ] = None
36
36
  suggestions: Annotated[
37
- list[str] | None, Field(description='Suggested values or options for the required input')
37
+ list[str] | None, Field(description="Suggested values or options for the required input")
38
38
  ] = None
@@ -15,10 +15,10 @@ from ..core import ext as ext_1
15
15
 
16
16
  class GetProductsSubmitted(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
20
  context: context_1.ContextObject | None = None
21
21
  estimated_completion: Annotated[
22
- AwareDatetime | None, Field(description='Estimated completion time for the search')
22
+ AwareDatetime | None, Field(description="Estimated completion time for the search")
23
23
  ] = None
24
24
  ext: ext_1.ExtensionObject | None = None
@@ -15,7 +15,7 @@ from ..core import ext as ext_1
15
15
 
16
16
  class GetProductsWorking(AdCPBaseModel):
17
17
  model_config = ConfigDict(
18
- extra='allow',
18
+ extra="allow",
19
19
  )
20
20
  context: context_1.ContextObject | None = None
21
21
  current_step: Annotated[
@@ -27,9 +27,9 @@ class GetProductsWorking(AdCPBaseModel):
27
27
  ext: ext_1.ExtensionObject | None = None
28
28
  percentage: Annotated[
29
29
  float | None,
30
- Field(description='Progress percentage of the search operation', ge=0.0, le=100.0),
30
+ Field(description="Progress percentage of the search operation", ge=0.0, le=100.0),
31
31
  ] = None
32
- step_number: Annotated[int | None, Field(description='Current step number (1-indexed)')] = None
32
+ step_number: Annotated[int | None, Field(description="Current step number (1-indexed)")] = None
33
33
  total_steps: Annotated[
34
- int | None, Field(description='Total number of steps in the search process')
34
+ int | None, Field(description="Total number of steps in the search process")
35
35
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_request.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -12,22 +12,28 @@ from pydantic import ConfigDict, Field
12
12
  from ..core import brand_manifest_ref
13
13
  from ..core import context as context_1
14
14
  from ..core import ext as ext_1
15
- from ..core import product_filters
15
+ from ..core import product_filters, property_list_ref
16
16
 
17
17
 
18
18
  class GetProductsRequest(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
22
  brand_manifest: Annotated[
23
23
  brand_manifest_ref.BrandManifestReference | None,
24
24
  Field(
25
- description='Brand information manifest providing brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest.'
25
+ description="Brand information manifest providing brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest."
26
26
  ),
27
27
  ] = None
28
28
  brief: Annotated[
29
- str | None, Field(description='Natural language description of campaign requirements')
29
+ str | None, Field(description="Natural language description of campaign requirements")
30
30
  ] = None
31
31
  context: context_1.ContextObject | None = None
32
32
  ext: ext_1.ExtensionObject | None = None
33
33
  filters: product_filters.ProductFilters | None = None
34
+ property_list: Annotated[
35
+ property_list_ref.PropertyListReference | None,
36
+ Field(
37
+ description="[AdCP 3.0] Reference to an externally managed property list. When provided, the sales agent should filter products to only those available on properties in the list."
38
+ ),
39
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/get_products_response.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,12 +17,18 @@ from ..core import product
17
17
 
18
18
  class GetProductsResponse(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
22
  context: context_1.ContextObject | None = None
23
23
  errors: Annotated[
24
24
  list[error.Error] | None,
25
- Field(description='Task-specific errors and warnings (e.g., product filtering issues)'),
25
+ Field(description="Task-specific errors and warnings (e.g., product filtering issues)"),
26
26
  ] = None
27
27
  ext: ext_1.ExtensionObject | None = None
28
- products: Annotated[list[product.Product], Field(description='Array of matching products')]
28
+ products: Annotated[list[product.Product], Field(description="Array of matching products")]
29
+ property_list_applied: Annotated[
30
+ bool | None,
31
+ Field(
32
+ description="[AdCP 3.0] Indicates whether property_list filtering was applied. True if the agent filtered products based on the provided property_list. Absent or false if property_list was not provided or not supported by this agent."
33
+ ),
34
+ ] = None
@@ -18,21 +18,21 @@ class PublisherDomain(RootModel[str]):
18
18
  str,
19
19
  Field(
20
20
  description="Publisher domain to filter by (e.g., 'cnn.com', 'espn.com')",
21
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
21
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
22
22
  ),
23
23
  ]
24
24
 
25
25
 
26
26
  class ListAuthorizedPropertiesRequest(AdCPBaseModel):
27
27
  model_config = ConfigDict(
28
- extra='allow',
28
+ extra="allow",
29
29
  )
30
30
  context: context_1.ContextObject | None = None
31
31
  ext: ext_1.ExtensionObject | None = None
32
32
  publisher_domains: Annotated[
33
33
  list[PublisherDomain] | None,
34
34
  Field(
35
- description='Filter to specific publisher domains (optional). If omitted, returns all publishers this agent represents.',
35
+ description="Filter to specific publisher domains (optional). If omitted, returns all publishers this agent represents.",
36
36
  min_length=1,
37
37
  ),
38
38
  ] = None
@@ -16,7 +16,7 @@ from ..enums import channels
16
16
 
17
17
 
18
18
  class PrimaryCountry(RootModel[str]):
19
- root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
19
+ root: Annotated[str, Field(pattern="^[A-Z]{2}$")]
20
20
 
21
21
 
22
22
  class PublisherDomain(RootModel[str]):
@@ -24,14 +24,14 @@ class PublisherDomain(RootModel[str]):
24
24
  str,
25
25
  Field(
26
26
  description="Domain where publisher's adagents.json is hosted (e.g., 'cnn.com')",
27
- pattern='^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$',
27
+ pattern="^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$",
28
28
  ),
29
29
  ]
30
30
 
31
31
 
32
32
  class ListAuthorizedPropertiesResponse(AdCPBaseModel):
33
33
  model_config = ConfigDict(
34
- extra='allow',
34
+ extra="allow",
35
35
  )
36
36
  advertising_policies: Annotated[
37
37
  str | None,
@@ -44,7 +44,7 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
44
44
  context: context_1.ContextObject | None = None
45
45
  errors: Annotated[
46
46
  list[error.Error] | None,
47
- Field(description='Task-specific errors and warnings (e.g., property availability issues)'),
47
+ Field(description="Task-specific errors and warnings (e.g., property availability issues)"),
48
48
  ] = None
49
49
  ext: ext_1.ExtensionObject | None = None
50
50
  last_updated: Annotated[
@@ -56,7 +56,7 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
56
56
  portfolio_description: Annotated[
57
57
  str | None,
58
58
  Field(
59
- description='Markdown-formatted description of the property portfolio, including inventory types, audience characteristics, and special features.',
59
+ description="Markdown-formatted description of the property portfolio, including inventory types, audience characteristics, and special features.",
60
60
  max_length=5000,
61
61
  min_length=1,
62
62
  ),
@@ -64,14 +64,14 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
64
64
  primary_channels: Annotated[
65
65
  list[channels.AdvertisingChannels] | None,
66
66
  Field(
67
- description='Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.',
67
+ description="Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.",
68
68
  min_length=1,
69
69
  ),
70
70
  ] = None
71
71
  primary_countries: Annotated[
72
72
  list[PrimaryCountry] | None,
73
73
  Field(
74
- description='Primary countries (ISO 3166-1 alpha-2 codes) where properties are concentrated. Helps buying agents quickly filter relevance.',
74
+ description="Primary countries (ISO 3166-1 alpha-2 codes) where properties are concentrated. Helps buying agents quickly filter relevance.",
75
75
  min_length=1,
76
76
  ),
77
77
  ] = None
@@ -17,7 +17,7 @@ from ..enums import asset_content_type, format_category
17
17
 
18
18
  class ListCreativeFormatsRequest(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='allow',
20
+ extra="allow",
21
21
  )
22
22
  asset_types: Annotated[
23
23
  list[asset_content_type.AssetContentType] | None,
@@ -30,45 +30,45 @@ class ListCreativeFormatsRequest(AdCPBaseModel):
30
30
  format_ids: Annotated[
31
31
  list[format_id.FormatId] | None,
32
32
  Field(
33
- description='Return only these specific format IDs (e.g., from get_products response)'
33
+ description="Return only these specific format IDs (e.g., from get_products response)"
34
34
  ),
35
35
  ] = None
36
36
  is_responsive: Annotated[
37
37
  bool | None,
38
38
  Field(
39
- description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.'
39
+ description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions."
40
40
  ),
41
41
  ] = None
42
42
  max_height: Annotated[
43
43
  int | None,
44
44
  Field(
45
- description='Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits.'
45
+ description="Maximum height in pixels (inclusive). Returns formats where ANY render has height <= this value. For multi-render formats, matches if at least one render fits."
46
46
  ),
47
47
  ] = None
48
48
  max_width: Annotated[
49
49
  int | None,
50
50
  Field(
51
- description='Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits.'
51
+ description="Maximum width in pixels (inclusive). Returns formats where ANY render has width <= this value. For multi-render formats, matches if at least one render fits."
52
52
  ),
53
53
  ] = None
54
54
  min_height: Annotated[
55
55
  int | None,
56
56
  Field(
57
- description='Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value.'
57
+ description="Minimum height in pixels (inclusive). Returns formats where ANY render has height >= this value."
58
58
  ),
59
59
  ] = None
60
60
  min_width: Annotated[
61
61
  int | None,
62
62
  Field(
63
- description='Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value.'
63
+ description="Minimum width in pixels (inclusive). Returns formats where ANY render has width >= this value."
64
64
  ),
65
65
  ] = None
66
66
  name_search: Annotated[
67
- str | None, Field(description='Search for formats by name (case-insensitive partial match)')
67
+ str | None, Field(description="Search for formats by name (case-insensitive partial match)")
68
68
  ] = None
69
69
  type: Annotated[
70
70
  format_category.FormatCategory | None,
71
71
  Field(
72
- description='Filter by format type (technical categories with distinct requirements)'
72
+ description="Filter by format type (technical categories with distinct requirements)"
73
73
  ),
74
74
  ] = None
@@ -18,7 +18,7 @@ from ..enums import creative_agent_capability
18
18
 
19
19
  class CreativeAgent(AdCPBaseModel):
20
20
  agent_name: Annotated[
21
- str | None, Field(description='Human-readable name for the creative agent')
21
+ str | None, Field(description="Human-readable name for the creative agent")
22
22
  ] = None
23
23
  agent_url: Annotated[
24
24
  AnyUrl,
@@ -28,24 +28,24 @@ class CreativeAgent(AdCPBaseModel):
28
28
  ]
29
29
  capabilities: Annotated[
30
30
  list[creative_agent_capability.CreativeAgentCapability] | None,
31
- Field(description='Capabilities this creative agent provides'),
31
+ Field(description="Capabilities this creative agent provides"),
32
32
  ] = None
33
33
 
34
34
 
35
35
  class ListCreativeFormatsResponse(AdCPBaseModel):
36
36
  model_config = ConfigDict(
37
- extra='allow',
37
+ extra="allow",
38
38
  )
39
39
  context: context_1.ContextObject | None = None
40
40
  creative_agents: Annotated[
41
41
  list[CreativeAgent] | None,
42
42
  Field(
43
- description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.'
43
+ description="Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats."
44
44
  ),
45
45
  ] = None
46
46
  errors: Annotated[
47
47
  list[error.Error] | None,
48
- Field(description='Task-specific errors and warnings (e.g., format availability issues)'),
48
+ Field(description="Task-specific errors and warnings (e.g., format availability issues)"),
49
49
  ] = None
50
50
  ext: ext_1.ExtensionObject | None = None
51
51
  formats: Annotated[
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creatives_request.json
3
- # timestamp: 2026-01-08T19:25:24+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,60 +17,60 @@ from ..enums import creative_sort_field, sort_direction
17
17
 
18
18
 
19
19
  class FieldModel(Enum):
20
- creative_id = 'creative_id'
21
- name = 'name'
22
- format = 'format'
23
- status = 'status'
24
- created_date = 'created_date'
25
- updated_date = 'updated_date'
26
- tags = 'tags'
27
- assignments = 'assignments'
28
- performance = 'performance'
29
- sub_assets = 'sub_assets'
20
+ creative_id = "creative_id"
21
+ name = "name"
22
+ format = "format"
23
+ status = "status"
24
+ created_date = "created_date"
25
+ updated_date = "updated_date"
26
+ tags = "tags"
27
+ assignments = "assignments"
28
+ performance = "performance"
29
+ sub_assets = "sub_assets"
30
30
 
31
31
 
32
32
  class Pagination(AdCPBaseModel):
33
33
  model_config = ConfigDict(
34
- extra='allow',
34
+ extra="allow",
35
35
  )
36
36
  limit: Annotated[
37
- int | None, Field(description='Maximum number of creatives to return', ge=1, le=100)
37
+ int | None, Field(description="Maximum number of creatives to return", ge=1, le=100)
38
38
  ] = 50
39
- offset: Annotated[int | None, Field(description='Number of creatives to skip', ge=0)] = 0
39
+ offset: Annotated[int | None, Field(description="Number of creatives to skip", ge=0)] = 0
40
40
 
41
41
 
42
42
  class Sort(AdCPBaseModel):
43
43
  model_config = ConfigDict(
44
- extra='allow',
44
+ extra="allow",
45
45
  )
46
46
  direction: Annotated[
47
- sort_direction.SortDirection | None, Field(description='Sort direction')
47
+ sort_direction.SortDirection | None, Field(description="Sort direction")
48
48
  ] = sort_direction.SortDirection.desc
49
49
  field: Annotated[
50
- creative_sort_field.CreativeSortField | None, Field(description='Field to sort by')
50
+ creative_sort_field.CreativeSortField | None, Field(description="Field to sort by")
51
51
  ] = creative_sort_field.CreativeSortField.created_date
52
52
 
53
53
 
54
54
  class ListCreativesRequest(AdCPBaseModel):
55
55
  model_config = ConfigDict(
56
- extra='allow',
56
+ extra="allow",
57
57
  )
58
58
  context: context_1.ContextObject | None = None
59
59
  ext: ext_1.ExtensionObject | None = None
60
60
  fields: Annotated[
61
61
  list[FieldModel] | None,
62
- Field(description='Specific fields to include in response (omit for all fields)'),
62
+ Field(description="Specific fields to include in response (omit for all fields)"),
63
63
  ] = None
64
64
  filters: creative_filters.CreativeFilters | None = None
65
65
  include_assignments: Annotated[
66
- bool | None, Field(description='Include package assignment information in response')
66
+ bool | None, Field(description="Include package assignment information in response")
67
67
  ] = True
68
68
  include_performance: Annotated[
69
- bool | None, Field(description='Include aggregated performance metrics in response')
69
+ bool | None, Field(description="Include aggregated performance metrics in response")
70
70
  ] = False
71
71
  include_sub_assets: Annotated[
72
72
  bool | None,
73
- Field(description='Include sub-assets (for carousel/native formats) in response'),
73
+ Field(description="Include sub-assets (for carousel/native formats) in response"),
74
74
  ] = False
75
- pagination: Annotated[Pagination | None, Field(description='Pagination parameters')] = None
76
- sort: Annotated[Sort | None, Field(description='Sorting parameters')] = None
75
+ pagination: Annotated[Pagination | None, Field(description="Pagination parameters")] = None
76
+ sort: Annotated[Sort | None, Field(description="Sorting parameters")] = None
@@ -30,83 +30,83 @@ from ..enums import creative_status, sort_direction
30
30
 
31
31
 
32
32
  class Status(Enum):
33
- active = 'active'
34
- paused = 'paused'
35
- ended = 'ended'
33
+ active = "active"
34
+ paused = "paused"
35
+ ended = "ended"
36
36
 
37
37
 
38
38
  class AssignedPackage(AdCPBaseModel):
39
39
  model_config = ConfigDict(
40
- extra='allow',
40
+ extra="allow",
41
41
  )
42
- assigned_date: Annotated[AwareDatetime, Field(description='When this assignment was created')]
43
- package_id: Annotated[str, Field(description='Package identifier')]
44
- package_name: Annotated[str | None, Field(description='Human-readable package name')] = None
45
- status: Annotated[Status, Field(description='Status of this specific assignment')]
42
+ assigned_date: Annotated[AwareDatetime, Field(description="When this assignment was created")]
43
+ package_id: Annotated[str, Field(description="Package identifier")]
44
+ package_name: Annotated[str | None, Field(description="Human-readable package name")] = None
45
+ status: Annotated[Status, Field(description="Status of this specific assignment")]
46
46
 
47
47
 
48
48
  class Assignments(AdCPBaseModel):
49
49
  model_config = ConfigDict(
50
- extra='allow',
50
+ extra="allow",
51
51
  )
52
52
  assigned_packages: Annotated[
53
53
  list[AssignedPackage] | None,
54
- Field(description='List of packages this creative is assigned to'),
54
+ Field(description="List of packages this creative is assigned to"),
55
55
  ] = None
56
56
  assignment_count: Annotated[
57
- int, Field(description='Total number of active package assignments', ge=0)
57
+ int, Field(description="Total number of active package assignments", ge=0)
58
58
  ]
59
59
 
60
60
 
61
61
  class Performance(AdCPBaseModel):
62
62
  model_config = ConfigDict(
63
- extra='allow',
63
+ extra="allow",
64
64
  )
65
65
  clicks: Annotated[
66
- int | None, Field(description='Total clicks across all assignments', ge=0)
66
+ int | None, Field(description="Total clicks across all assignments", ge=0)
67
67
  ] = None
68
68
  conversion_rate: Annotated[
69
- float | None, Field(description='Conversion rate across all assignments', ge=0.0, le=1.0)
69
+ float | None, Field(description="Conversion rate across all assignments", ge=0.0, le=1.0)
70
70
  ] = None
71
71
  ctr: Annotated[
72
- float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0)
72
+ float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0)
73
73
  ] = None
74
74
  impressions: Annotated[
75
- int | None, Field(description='Total impressions across all assignments', ge=0)
75
+ int | None, Field(description="Total impressions across all assignments", ge=0)
76
76
  ] = None
77
77
  last_updated: Annotated[
78
- AwareDatetime, Field(description='When performance data was last updated')
78
+ AwareDatetime, Field(description="When performance data was last updated")
79
79
  ]
80
80
  performance_score: Annotated[
81
- float | None, Field(description='Aggregated performance score (0-100)', ge=0.0, le=100.0)
81
+ float | None, Field(description="Aggregated performance score (0-100)", ge=0.0, le=100.0)
82
82
  ] = None
83
83
 
84
84
 
85
85
  class Pagination(AdCPBaseModel):
86
86
  model_config = ConfigDict(
87
- extra='allow',
87
+ extra="allow",
88
88
  )
89
89
  current_page: Annotated[
90
- int | None, Field(description='Current page number (1-based)', ge=1)
90
+ int | None, Field(description="Current page number (1-based)", ge=1)
91
91
  ] = None
92
- has_more: Annotated[bool, Field(description='Whether more results are available')]
93
- limit: Annotated[int, Field(description='Maximum number of results requested', ge=1)]
94
- offset: Annotated[int, Field(description='Number of results skipped', ge=0)]
92
+ has_more: Annotated[bool, Field(description="Whether more results are available")]
93
+ limit: Annotated[int, Field(description="Maximum number of results requested", ge=1)]
94
+ offset: Annotated[int, Field(description="Number of results skipped", ge=0)]
95
95
  total_pages: Annotated[
96
- int | None, Field(description='Total number of pages available', ge=0)
96
+ int | None, Field(description="Total number of pages available", ge=0)
97
97
  ] = None
98
98
 
99
99
 
100
100
  class StatusSummary(AdCPBaseModel):
101
101
  model_config = ConfigDict(
102
- extra='allow',
102
+ extra="allow",
103
103
  )
104
- approved: Annotated[int | None, Field(description='Number of approved creatives', ge=0)] = None
105
- archived: Annotated[int | None, Field(description='Number of archived creatives', ge=0)] = None
104
+ approved: Annotated[int | None, Field(description="Number of approved creatives", ge=0)] = None
105
+ archived: Annotated[int | None, Field(description="Number of archived creatives", ge=0)] = None
106
106
  pending_review: Annotated[
107
- int | None, Field(description='Number of creatives pending review', ge=0)
107
+ int | None, Field(description="Number of creatives pending review", ge=0)
108
108
  ] = None
109
- rejected: Annotated[int | None, Field(description='Number of rejected creatives', ge=0)] = None
109
+ rejected: Annotated[int | None, Field(description="Number of rejected creatives", ge=0)] = None
110
110
 
111
111
 
112
112
  class SortApplied(AdCPBaseModel):
@@ -116,26 +116,26 @@ class SortApplied(AdCPBaseModel):
116
116
 
117
117
  class QuerySummary(AdCPBaseModel):
118
118
  model_config = ConfigDict(
119
- extra='allow',
119
+ extra="allow",
120
120
  )
121
121
  filters_applied: Annotated[
122
- list[str] | None, Field(description='List of filters that were applied to the query')
122
+ list[str] | None, Field(description="List of filters that were applied to the query")
123
123
  ] = None
124
124
  returned: Annotated[
125
- int, Field(description='Number of creatives returned in this response', ge=0)
125
+ int, Field(description="Number of creatives returned in this response", ge=0)
126
126
  ]
127
127
  sort_applied: Annotated[
128
- SortApplied | None, Field(description='Sort order that was applied')
128
+ SortApplied | None, Field(description="Sort order that was applied")
129
129
  ] = None
130
130
  total_matching: Annotated[
131
131
  int,
132
- Field(description='Total number of creatives matching filters (across all pages)', ge=0),
132
+ Field(description="Total number of creatives matching filters (across all pages)", ge=0),
133
133
  ]
134
134
 
135
135
 
136
136
  class Creative(AdCPBaseModel):
137
137
  model_config = ConfigDict(
138
- extra='allow',
138
+ extra="allow",
139
139
  )
140
140
  assets: Annotated[
141
141
  dict[
@@ -153,60 +153,60 @@ class Creative(AdCPBaseModel):
153
153
  | url_asset.UrlAsset,
154
154
  ]
155
155
  | None,
156
- Field(description='Assets for this creative, keyed by asset_role'),
156
+ Field(description="Assets for this creative, keyed by asset_role"),
157
157
  ] = None
158
158
  assignments: Annotated[
159
159
  Assignments | None,
160
- Field(description='Current package assignments (included when include_assignments=true)'),
160
+ Field(description="Current package assignments (included when include_assignments=true)"),
161
161
  ] = None
162
162
  created_date: Annotated[
163
- AwareDatetime, Field(description='When the creative was uploaded to the library')
163
+ AwareDatetime, Field(description="When the creative was uploaded to the library")
164
164
  ]
165
- creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
165
+ creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
166
166
  format_id: Annotated[
167
167
  format_id_1.FormatId,
168
- Field(description='Format identifier specifying which format this creative conforms to'),
168
+ Field(description="Format identifier specifying which format this creative conforms to"),
169
169
  ]
170
- name: Annotated[str, Field(description='Human-readable creative name')]
170
+ name: Annotated[str, Field(description="Human-readable creative name")]
171
171
  performance: Annotated[
172
172
  Performance | None,
173
173
  Field(
174
- description='Aggregated performance metrics (included when include_performance=true)'
174
+ description="Aggregated performance metrics (included when include_performance=true)"
175
175
  ),
176
176
  ] = None
177
177
  status: Annotated[
178
- creative_status.CreativeStatus, Field(description='Current approval status of the creative')
178
+ creative_status.CreativeStatus, Field(description="Current approval status of the creative")
179
179
  ]
180
180
  sub_assets: Annotated[
181
181
  list[sub_asset.SubAsset] | None,
182
182
  Field(
183
- description='Sub-assets for multi-asset formats (included when include_sub_assets=true)'
183
+ description="Sub-assets for multi-asset formats (included when include_sub_assets=true)"
184
184
  ),
185
185
  ] = None
186
186
  tags: Annotated[
187
- list[str] | None, Field(description='User-defined tags for organization and searchability')
187
+ list[str] | None, Field(description="User-defined tags for organization and searchability")
188
188
  ] = None
189
- updated_date: Annotated[AwareDatetime, Field(description='When the creative was last modified')]
189
+ updated_date: Annotated[AwareDatetime, Field(description="When the creative was last modified")]
190
190
 
191
191
 
192
192
  class ListCreativesResponse(AdCPBaseModel):
193
193
  model_config = ConfigDict(
194
- extra='allow',
194
+ extra="allow",
195
195
  )
196
196
  context: context_1.ContextObject | None = None
197
197
  creatives: Annotated[
198
- list[Creative], Field(description='Array of creative assets matching the query')
198
+ list[Creative], Field(description="Array of creative assets matching the query")
199
199
  ]
200
200
  ext: ext_1.ExtensionObject | None = None
201
201
  format_summary: Annotated[
202
- dict[str, int] | None, Field(description='Breakdown of creatives by format type')
202
+ dict[str, int] | None, Field(description="Breakdown of creatives by format type")
203
203
  ] = None
204
204
  pagination: Annotated[
205
- Pagination, Field(description='Pagination information for navigating results')
205
+ Pagination, Field(description="Pagination information for navigating results")
206
206
  ]
207
207
  query_summary: Annotated[
208
- QuerySummary, Field(description='Summary of the query that was executed')
208
+ QuerySummary, Field(description="Summary of the query that was executed")
209
209
  ]
210
210
  status_summary: Annotated[
211
- StatusSummary | None, Field(description='Breakdown of creatives by status')
211
+ StatusSummary | None, Field(description="Breakdown of creatives by status")
212
212
  ] = None