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
@@ -15,21 +15,21 @@ class BrandManifestReference(RootModel[brand_manifest.BrandManifest | AnyUrl]):
15
15
  root: Annotated[
16
16
  brand_manifest.BrandManifest | AnyUrl,
17
17
  Field(
18
- description='Brand manifest provided either as an inline object or a URL string pointing to a hosted manifest',
18
+ description="Brand manifest provided either as an inline object or a URL string pointing to a hosted manifest",
19
19
  examples=[
20
20
  {
21
- 'data': {
22
- 'colors': {'primary': '#FF6B35'},
23
- 'name': 'ACME Corporation',
24
- 'url': 'https://acmecorp.com',
21
+ "data": {
22
+ "colors": {"primary": "#FF6B35"},
23
+ "name": "ACME Corporation",
24
+ "url": "https://acmecorp.com",
25
25
  },
26
- 'description': 'Inline brand manifest',
26
+ "description": "Inline brand manifest",
27
27
  },
28
28
  {
29
- 'data': 'https://cdn.acmecorp.com/brand-manifest.json',
30
- 'description': 'URL string reference to hosted manifest',
29
+ "data": "https://cdn.acmecorp.com/brand-manifest.json",
30
+ "description": "URL string reference to hosted manifest",
31
31
  },
32
32
  ],
33
- title='Brand Manifest Reference',
33
+ title="Brand Manifest Reference",
34
34
  ),
35
35
  ]
@@ -10,5 +10,5 @@ from pydantic import ConfigDict
10
10
 
11
11
  class ContextObject(AdCPBaseModel):
12
12
  model_config = ConfigDict(
13
- extra='allow',
13
+ extra="allow",
14
14
  )
@@ -27,26 +27,26 @@ from .assets import (
27
27
 
28
28
  class Input(AdCPBaseModel):
29
29
  model_config = ConfigDict(
30
- extra='allow',
30
+ extra="allow",
31
31
  )
32
32
  context_description: Annotated[
33
33
  str | None,
34
- Field(description='Natural language description of the context for AI-generated content'),
34
+ Field(description="Natural language description of the context for AI-generated content"),
35
35
  ] = None
36
36
  macros: Annotated[
37
- dict[str, str] | None, Field(description='Macro values to apply for this preview')
37
+ dict[str, str] | None, Field(description="Macro values to apply for this preview")
38
38
  ] = None
39
- name: Annotated[str, Field(description='Human-readable name for this preview variant')]
39
+ name: Annotated[str, Field(description="Human-readable name for this preview variant")]
40
40
 
41
41
 
42
42
  class CreativeAsset(AdCPBaseModel):
43
43
  model_config = ConfigDict(
44
- extra='allow',
44
+ extra="allow",
45
45
  )
46
46
  approved: Annotated[
47
47
  bool | None,
48
48
  Field(
49
- description='For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.'
49
+ description="For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives."
50
50
  ),
51
51
  ] = None
52
52
  assets: Annotated[
@@ -64,22 +64,22 @@ class CreativeAsset(AdCPBaseModel):
64
64
  | promoted_offerings.PromotedOfferings
65
65
  | url_asset.UrlAsset,
66
66
  ],
67
- Field(description='Assets required by the format, keyed by asset_role'),
67
+ Field(description="Assets required by the format, keyed by asset_role"),
68
68
  ]
69
- creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
69
+ creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
70
70
  format_id: Annotated[
71
71
  format_id_1.FormatId,
72
72
  Field(
73
- description='Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats.'
73
+ description="Format identifier specifying which format this creative conforms to. Can be: (1) concrete format_id referencing a format with fixed dimensions, (2) template format_id referencing a template format, or (3) parameterized format_id with dimensions/duration parameters for template formats."
74
74
  ),
75
75
  ]
76
76
  inputs: Annotated[
77
77
  list[Input] | None,
78
78
  Field(
79
- description='Preview contexts for generative formats - defines what scenarios to generate previews for'
79
+ description="Preview contexts for generative formats - defines what scenarios to generate previews for"
80
80
  ),
81
81
  ] = None
82
- name: Annotated[str, Field(description='Human-readable creative name')]
82
+ name: Annotated[str, Field(description="Human-readable creative name")]
83
83
  placement_ids: Annotated[
84
84
  list[str] | None,
85
85
  Field(
@@ -88,12 +88,12 @@ class CreativeAsset(AdCPBaseModel):
88
88
  ),
89
89
  ] = None
90
90
  tags: Annotated[
91
- list[str] | None, Field(description='User-defined tags for organization and searchability')
91
+ list[str] | None, Field(description="User-defined tags for organization and searchability")
92
92
  ] = None
93
93
  weight: Annotated[
94
94
  float | None,
95
95
  Field(
96
- description='Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.',
96
+ description="Optional delivery weight for creative rotation when uploading via create_media_buy or update_media_buy (0-100). If omitted, platform determines rotation. Only used during upload to media buy - not stored in creative library.",
97
97
  ge=0.0,
98
98
  le=100.0,
99
99
  ),
@@ -12,9 +12,9 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class CreativeAssignment(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- creative_id: Annotated[str, Field(description='Unique identifier for the creative')]
17
+ creative_id: Annotated[str, Field(description="Unique identifier for the creative")]
18
18
  placement_ids: Annotated[
19
19
  list[str] | None,
20
20
  Field(
@@ -23,5 +23,5 @@ class CreativeAssignment(AdCPBaseModel):
23
23
  ),
24
24
  ] = None
25
25
  weight: Annotated[
26
- float | None, Field(description='Delivery weight for this creative', ge=0.0, le=100.0)
26
+ float | None, Field(description="Delivery weight for this creative", ge=0.0, le=100.0)
27
27
  ] = None
@@ -14,73 +14,73 @@ from ..enums import creative_status
14
14
 
15
15
  class CreativeFilters(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
19
  assigned_to_package: Annotated[
20
- str | None, Field(description='Filter creatives assigned to this specific package')
20
+ str | None, Field(description="Filter creatives assigned to this specific package")
21
21
  ] = None
22
22
  assigned_to_packages: Annotated[
23
- list[str] | None, Field(description='Filter creatives assigned to any of these packages')
23
+ list[str] | None, Field(description="Filter creatives assigned to any of these packages")
24
24
  ] = None
25
25
  buyer_refs: Annotated[
26
26
  list[str] | None,
27
27
  Field(
28
- description='Filter creatives assigned to media buys with any of these buyer references'
28
+ description="Filter creatives assigned to media buys with any of these buyer references"
29
29
  ),
30
30
  ] = None
31
31
  created_after: Annotated[
32
32
  AwareDatetime | None,
33
- Field(description='Filter creatives created after this date (ISO 8601)'),
33
+ Field(description="Filter creatives created after this date (ISO 8601)"),
34
34
  ] = None
35
35
  created_before: Annotated[
36
36
  AwareDatetime | None,
37
- Field(description='Filter creatives created before this date (ISO 8601)'),
37
+ Field(description="Filter creatives created before this date (ISO 8601)"),
38
38
  ] = None
39
39
  creative_ids: Annotated[
40
- list[str] | None, Field(description='Filter by specific creative IDs', max_length=100)
40
+ list[str] | None, Field(description="Filter by specific creative IDs", max_length=100)
41
41
  ] = None
42
42
  format: Annotated[
43
43
  str | None,
44
- Field(description='Filter by creative format type (e.g., video, audio, display)'),
44
+ Field(description="Filter by creative format type (e.g., video, audio, display)"),
45
45
  ] = None
46
46
  formats: Annotated[
47
- list[str] | None, Field(description='Filter by multiple creative format types')
47
+ list[str] | None, Field(description="Filter by multiple creative format types")
48
48
  ] = None
49
49
  has_performance_data: Annotated[
50
- bool | None, Field(description='Filter creatives that have performance data when true')
50
+ bool | None, Field(description="Filter creatives that have performance data when true")
51
51
  ] = None
52
52
  media_buy_ids: Annotated[
53
- list[str] | None, Field(description='Filter creatives assigned to any of these media buys')
53
+ list[str] | None, Field(description="Filter creatives assigned to any of these media buys")
54
54
  ] = None
55
55
  name_contains: Annotated[
56
56
  str | None,
57
- Field(description='Filter by creative names containing this text (case-insensitive)'),
57
+ Field(description="Filter by creative names containing this text (case-insensitive)"),
58
58
  ] = None
59
59
  status: Annotated[
60
60
  creative_status.CreativeStatus | None,
61
- Field(description='Filter by creative approval status'),
61
+ Field(description="Filter by creative approval status"),
62
62
  ] = None
63
63
  statuses: Annotated[
64
64
  list[creative_status.CreativeStatus] | None,
65
- Field(description='Filter by multiple creative statuses'),
65
+ Field(description="Filter by multiple creative statuses"),
66
66
  ] = None
67
67
  tags: Annotated[
68
- list[str] | None, Field(description='Filter by creative tags (all tags must match)')
68
+ list[str] | None, Field(description="Filter by creative tags (all tags must match)")
69
69
  ] = None
70
70
  tags_any: Annotated[
71
- list[str] | None, Field(description='Filter by creative tags (any tag must match)')
71
+ list[str] | None, Field(description="Filter by creative tags (any tag must match)")
72
72
  ] = None
73
73
  unassigned: Annotated[
74
74
  bool | None,
75
75
  Field(
76
- description='Filter for unassigned creatives when true, assigned creatives when false'
76
+ description="Filter for unassigned creatives when true, assigned creatives when false"
77
77
  ),
78
78
  ] = None
79
79
  updated_after: Annotated[
80
80
  AwareDatetime | None,
81
- Field(description='Filter creatives last updated after this date (ISO 8601)'),
81
+ Field(description="Filter creatives last updated after this date (ISO 8601)"),
82
82
  ] = None
83
83
  updated_before: Annotated[
84
84
  AwareDatetime | None,
85
- Field(description='Filter creatives last updated before this date (ISO 8601)'),
85
+ Field(description="Filter creatives last updated before this date (ISO 8601)"),
86
86
  ] = None
@@ -29,7 +29,7 @@ from .assets import (
29
29
 
30
30
  class CreativeManifest(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  assets: Annotated[
35
35
  dict[
@@ -61,6 +61,6 @@ class CreativeManifest(AdCPBaseModel):
61
61
  promoted_offering: Annotated[
62
62
  str | None,
63
63
  Field(
64
- description='Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.'
64
+ description="Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted."
65
65
  ),
66
66
  ] = None
@@ -14,15 +14,15 @@ from ..enums import co_branding_requirement, landing_page_requirement
14
14
 
15
15
  class CreativePolicy(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
19
  co_branding: Annotated[
20
- co_branding_requirement.CoBrandingRequirement, Field(description='Co-branding requirement')
20
+ co_branding_requirement.CoBrandingRequirement, Field(description="Co-branding requirement")
21
21
  ]
22
22
  landing_page: Annotated[
23
23
  landing_page_requirement.LandingPageRequirement,
24
- Field(description='Landing page requirements'),
24
+ Field(description="Landing page requirements"),
25
25
  ]
26
26
  templates_available: Annotated[
27
- bool, Field(description='Whether creative templates are provided')
27
+ bool, Field(description="Whether creative templates are provided")
28
28
  ]
@@ -12,15 +12,15 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class VenueBreakdownItem(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- impressions: Annotated[int, Field(description='Impressions delivered at this venue', ge=0)]
18
- loop_plays: Annotated[int | None, Field(description='Loop plays at this venue', ge=0)] = None
17
+ impressions: Annotated[int, Field(description="Impressions delivered at this venue", ge=0)]
18
+ loop_plays: Annotated[int | None, Field(description="Loop plays at this venue", ge=0)] = None
19
19
  screens_used: Annotated[
20
- int | None, Field(description='Number of screens used at this venue', ge=0)
20
+ int | None, Field(description="Number of screens used at this venue", ge=0)
21
21
  ] = None
22
- venue_id: Annotated[str, Field(description='Venue identifier')]
23
- venue_name: Annotated[str | None, Field(description='Human-readable venue name')] = None
22
+ venue_id: Annotated[str, Field(description="Venue identifier")]
23
+ venue_name: Annotated[str | None, Field(description="Human-readable venue name")] = None
24
24
  venue_type: Annotated[
25
25
  str | None,
26
26
  Field(description="Venue type (e.g., 'airport', 'transit', 'retail', 'billboard')"),
@@ -29,83 +29,83 @@ class VenueBreakdownItem(AdCPBaseModel):
29
29
 
30
30
  class DoohMetrics(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  calculation_notes: Annotated[
35
- str | None, Field(description='Explanation of how DOOH impressions were calculated')
35
+ str | None, Field(description="Explanation of how DOOH impressions were calculated")
36
36
  ] = None
37
37
  loop_plays: Annotated[
38
- int | None, Field(description='Number of times ad played in rotation', ge=0)
38
+ int | None, Field(description="Number of times ad played in rotation", ge=0)
39
39
  ] = None
40
40
  screen_time_seconds: Annotated[
41
- int | None, Field(description='Total display time in seconds', ge=0)
41
+ int | None, Field(description="Total display time in seconds", ge=0)
42
42
  ] = None
43
43
  screens_used: Annotated[
44
- int | None, Field(description='Number of unique screens displaying the ad', ge=0)
44
+ int | None, Field(description="Number of unique screens displaying the ad", ge=0)
45
45
  ] = None
46
46
  sov_achieved: Annotated[
47
47
  float | None,
48
- Field(description='Actual share of voice delivered (0.0 to 1.0)', ge=0.0, le=1.0),
48
+ Field(description="Actual share of voice delivered (0.0 to 1.0)", ge=0.0, le=1.0),
49
49
  ] = None
50
50
  venue_breakdown: Annotated[
51
- list[VenueBreakdownItem] | None, Field(description='Per-venue performance breakdown')
51
+ list[VenueBreakdownItem] | None, Field(description="Per-venue performance breakdown")
52
52
  ] = None
53
53
 
54
54
 
55
55
  class QuartileData(AdCPBaseModel):
56
- q1_views: Annotated[float | None, Field(description='25% completion views', ge=0.0)] = None
57
- q2_views: Annotated[float | None, Field(description='50% completion views', ge=0.0)] = None
58
- q3_views: Annotated[float | None, Field(description='75% completion views', ge=0.0)] = None
59
- q4_views: Annotated[float | None, Field(description='100% completion views', ge=0.0)] = None
56
+ q1_views: Annotated[float | None, Field(description="25% completion views", ge=0.0)] = None
57
+ q2_views: Annotated[float | None, Field(description="50% completion views", ge=0.0)] = None
58
+ q3_views: Annotated[float | None, Field(description="75% completion views", ge=0.0)] = None
59
+ q4_views: Annotated[float | None, Field(description="100% completion views", ge=0.0)] = None
60
60
 
61
61
 
62
62
  class DeliveryMetrics(AdCPBaseModel):
63
63
  model_config = ConfigDict(
64
- extra='allow',
64
+ extra="allow",
65
65
  )
66
- clicks: Annotated[float | None, Field(description='Total clicks', ge=0.0)] = None
66
+ clicks: Annotated[float | None, Field(description="Total clicks", ge=0.0)] = None
67
67
  completed_views: Annotated[
68
- float | None, Field(description='100% completions (for CPCV)', ge=0.0)
68
+ float | None, Field(description="100% completions (for CPCV)", ge=0.0)
69
69
  ] = None
70
70
  completion_rate: Annotated[
71
71
  float | None,
72
- Field(description='Completion rate (completed_views/impressions)', ge=0.0, le=1.0),
72
+ Field(description="Completion rate (completed_views/impressions)", ge=0.0, le=1.0),
73
73
  ] = None
74
74
  conversions: Annotated[
75
75
  float | None,
76
- Field(description='Conversions (reserved for future CPA pricing support)', ge=0.0),
76
+ Field(description="Conversions (reserved for future CPA pricing support)", ge=0.0),
77
77
  ] = None
78
78
  ctr: Annotated[
79
- float | None, Field(description='Click-through rate (clicks/impressions)', ge=0.0, le=1.0)
79
+ float | None, Field(description="Click-through rate (clicks/impressions)", ge=0.0, le=1.0)
80
80
  ] = None
81
81
  dooh_metrics: Annotated[
82
82
  DoohMetrics | None,
83
- Field(description='DOOH-specific metrics (only included for DOOH campaigns)'),
83
+ Field(description="DOOH-specific metrics (only included for DOOH campaigns)"),
84
84
  ] = None
85
85
  frequency: Annotated[
86
86
  float | None,
87
87
  Field(
88
- description='Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)',
88
+ description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)",
89
89
  ge=0.0,
90
90
  ),
91
91
  ] = None
92
92
  grps: Annotated[
93
- float | None, Field(description='Gross Rating Points delivered (for CPP)', ge=0.0)
93
+ float | None, Field(description="Gross Rating Points delivered (for CPP)", ge=0.0)
94
94
  ] = None
95
- impressions: Annotated[float | None, Field(description='Impressions delivered', ge=0.0)] = None
95
+ impressions: Annotated[float | None, Field(description="Impressions delivered", ge=0.0)] = None
96
96
  leads: Annotated[
97
97
  float | None,
98
- Field(description='Leads generated (reserved for future CPL pricing support)', ge=0.0),
98
+ Field(description="Leads generated (reserved for future CPL pricing support)", ge=0.0),
99
99
  ] = None
100
100
  quartile_data: Annotated[
101
- QuartileData | None, Field(description='Video quartile completion data')
101
+ QuartileData | None, Field(description="Video quartile completion data")
102
102
  ] = None
103
103
  reach: Annotated[
104
104
  float | None,
105
105
  Field(
106
- description='Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.',
106
+ description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.",
107
107
  ge=0.0,
108
108
  ),
109
109
  ] = None
110
- spend: Annotated[float | None, Field(description='Amount spent', ge=0.0)] = None
111
- views: Annotated[float | None, Field(description='Views at threshold (for CPV)', ge=0.0)] = None
110
+ spend: Annotated[float | None, Field(description="Amount spent", ge=0.0)] = None
111
+ views: Annotated[float | None, Field(description="Views at threshold (for CPV)", ge=0.0)] = None
@@ -14,65 +14,65 @@ from . import activation_key as activation_key_1
14
14
 
15
15
  class Deployment1(AdCPBaseModel):
16
16
  model_config = ConfigDict(
17
- extra='allow',
17
+ extra="allow",
18
18
  )
19
- account: Annotated[str | None, Field(description='Account identifier if applicable')] = None
19
+ account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
20
20
  activation_key: Annotated[
21
21
  activation_key_1.ActivationKey | None,
22
22
  Field(
23
- description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.'
23
+ description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
24
24
  ),
25
25
  ] = None
26
26
  deployed_at: Annotated[
27
27
  AwareDatetime | None,
28
- Field(description='Timestamp when activation completed (if is_live=true)'),
28
+ Field(description="Timestamp when activation completed (if is_live=true)"),
29
29
  ] = None
30
30
  estimated_activation_duration_minutes: Annotated[
31
31
  float | None,
32
32
  Field(
33
- description='Estimated time to activate if not live, or to complete activation if in progress',
33
+ description="Estimated time to activate if not live, or to complete activation if in progress",
34
34
  ge=0.0,
35
35
  ),
36
36
  ] = None
37
37
  is_live: Annotated[
38
- bool, Field(description='Whether signal is currently active on this deployment')
38
+ bool, Field(description="Whether signal is currently active on this deployment")
39
39
  ]
40
- platform: Annotated[str, Field(description='Platform identifier for DSPs')]
40
+ platform: Annotated[str, Field(description="Platform identifier for DSPs")]
41
41
  type: Annotated[
42
- Literal['platform'],
43
- Field(description='Discriminator indicating this is a platform-based deployment'),
42
+ Literal["platform"],
43
+ Field(description="Discriminator indicating this is a platform-based deployment"),
44
44
  ]
45
45
 
46
46
 
47
47
  class Deployment2(AdCPBaseModel):
48
48
  model_config = ConfigDict(
49
- extra='allow',
49
+ extra="allow",
50
50
  )
51
- account: Annotated[str | None, Field(description='Account identifier if applicable')] = None
51
+ account: Annotated[str | None, Field(description="Account identifier if applicable")] = None
52
52
  activation_key: Annotated[
53
53
  activation_key_1.ActivationKey | None,
54
54
  Field(
55
- description='The key to use for targeting. Only present if is_live=true AND requester has access to this deployment.'
55
+ description="The key to use for targeting. Only present if is_live=true AND requester has access to this deployment."
56
56
  ),
57
57
  ] = None
58
- agent_url: Annotated[AnyUrl, Field(description='URL identifying the deployment agent')]
58
+ agent_url: Annotated[AnyUrl, Field(description="URL identifying the deployment agent")]
59
59
  deployed_at: Annotated[
60
60
  AwareDatetime | None,
61
- Field(description='Timestamp when activation completed (if is_live=true)'),
61
+ Field(description="Timestamp when activation completed (if is_live=true)"),
62
62
  ] = None
63
63
  estimated_activation_duration_minutes: Annotated[
64
64
  float | None,
65
65
  Field(
66
- description='Estimated time to activate if not live, or to complete activation if in progress',
66
+ description="Estimated time to activate if not live, or to complete activation if in progress",
67
67
  ge=0.0,
68
68
  ),
69
69
  ] = None
70
70
  is_live: Annotated[
71
- bool, Field(description='Whether signal is currently active on this deployment')
71
+ bool, Field(description="Whether signal is currently active on this deployment")
72
72
  ]
73
73
  type: Annotated[
74
- Literal['agent'],
75
- Field(description='Discriminator indicating this is an agent URL-based deployment'),
74
+ Literal["agent"],
75
+ Field(description="Discriminator indicating this is an agent URL-based deployment"),
76
76
  ]
77
77
 
78
78
 
@@ -80,7 +80,7 @@ class Deployment(RootModel[Deployment1 | Deployment2]):
80
80
  root: Annotated[
81
81
  Deployment1 | Deployment2,
82
82
  Field(
83
- description='A signal deployment to a specific deployment target with activation status and key',
84
- title='Deployment',
83
+ description="A signal deployment to a specific deployment target with activation status and key",
84
+ title="Deployment",
85
85
  ),
86
86
  ]
@@ -12,34 +12,34 @@ from pydantic import AnyUrl, ConfigDict, Field, RootModel
12
12
 
13
13
  class Destination1(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
17
  account: Annotated[
18
- str | None, Field(description='Optional account identifier on the platform')
18
+ str | None, Field(description="Optional account identifier on the platform")
19
19
  ] = None
20
20
  platform: Annotated[
21
21
  str,
22
22
  Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')"),
23
23
  ]
24
24
  type: Annotated[
25
- Literal['platform'],
26
- Field(description='Discriminator indicating this is a platform-based deployment'),
25
+ Literal["platform"],
26
+ Field(description="Discriminator indicating this is a platform-based deployment"),
27
27
  ]
28
28
 
29
29
 
30
30
  class Destination2(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='allow',
32
+ extra="allow",
33
33
  )
34
34
  account: Annotated[
35
- str | None, Field(description='Optional account identifier on the agent')
35
+ str | None, Field(description="Optional account identifier on the agent")
36
36
  ] = None
37
37
  agent_url: Annotated[
38
- AnyUrl, Field(description='URL identifying the deployment agent (for sales agents, etc.)')
38
+ AnyUrl, Field(description="URL identifying the deployment agent (for sales agents, etc.)")
39
39
  ]
40
40
  type: Annotated[
41
- Literal['agent'],
42
- Field(description='Discriminator indicating this is an agent URL-based deployment'),
41
+ Literal["agent"],
42
+ Field(description="Discriminator indicating this is an agent URL-based deployment"),
43
43
  ]
44
44
 
45
45
 
@@ -47,7 +47,7 @@ class Destination(RootModel[Destination1 | Destination2]):
47
47
  root: Annotated[
48
48
  Destination1 | Destination2,
49
49
  Field(
50
- description='A deployment target where signals can be activated (DSP, sales agent, etc.)',
51
- title='Destination',
50
+ description="A deployment target where signals can be activated (DSP, sales agent, etc.)",
51
+ title="Destination",
52
52
  ),
53
53
  ]
@@ -12,18 +12,18 @@ from pydantic import ConfigDict, Field
12
12
 
13
13
  class Error(AdCPBaseModel):
14
14
  model_config = ConfigDict(
15
- extra='allow',
15
+ extra="allow",
16
16
  )
17
- code: Annotated[str, Field(description='Error code for programmatic handling')]
17
+ code: Annotated[str, Field(description="Error code for programmatic handling")]
18
18
  details: Annotated[
19
- dict[str, Any] | None, Field(description='Additional task-specific error details')
19
+ dict[str, Any] | None, Field(description="Additional task-specific error details")
20
20
  ] = None
21
21
  field: Annotated[
22
22
  str | None,
23
23
  Field(description="Field path associated with the error (e.g., 'packages[0].targeting')"),
24
24
  ] = None
25
- message: Annotated[str, Field(description='Human-readable error message')]
25
+ message: Annotated[str, Field(description="Human-readable error message")]
26
26
  retry_after: Annotated[
27
- float | None, Field(description='Seconds to wait before retrying the operation', ge=0.0)
27
+ float | None, Field(description="Seconds to wait before retrying the operation", ge=0.0)
28
28
  ] = None
29
- suggestion: Annotated[str | None, Field(description='Suggested fix for the error')] = None
29
+ suggestion: Annotated[str | None, Field(description="Suggested fix for the error")] = None
@@ -10,5 +10,5 @@ from pydantic import ConfigDict
10
10
 
11
11
  class ExtensionObject(AdCPBaseModel):
12
12
  model_config = ConfigDict(
13
- extra='allow',
13
+ extra="allow",
14
14
  )