adcp 2.17.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 (192) hide show
  1. adcp/ADCP_VERSION +1 -1
  2. adcp/__init__.py +22 -1
  3. adcp/__main__.py +72 -0
  4. adcp/protocols/mcp.py +3 -1
  5. adcp/types/_ergonomic.py +0 -4
  6. adcp/types/_generated.py +91 -4
  7. adcp/types/generated_poc/adagents.py +239 -149
  8. adcp/types/generated_poc/core/activation_key.py +9 -9
  9. adcp/types/generated_poc/core/assets/audio_asset.py +6 -6
  10. adcp/types/generated_poc/core/assets/css_asset.py +3 -3
  11. adcp/types/generated_poc/core/assets/daast_asset.py +19 -19
  12. adcp/types/generated_poc/core/assets/html_asset.py +3 -3
  13. adcp/types/generated_poc/core/assets/image_asset.py +7 -7
  14. adcp/types/generated_poc/core/assets/javascript_asset.py +4 -4
  15. adcp/types/generated_poc/core/assets/text_asset.py +3 -3
  16. adcp/types/generated_poc/core/assets/url_asset.py +4 -4
  17. adcp/types/generated_poc/core/assets/vast_asset.py +19 -19
  18. adcp/types/generated_poc/core/assets/video_asset.py +8 -8
  19. adcp/types/generated_poc/core/assets/webhook_asset.py +10 -10
  20. adcp/types/generated_poc/core/async_response_data.py +2 -2
  21. adcp/types/generated_poc/core/brand_manifest.py +56 -56
  22. adcp/types/generated_poc/core/brand_manifest_ref.py +9 -9
  23. adcp/types/generated_poc/core/context.py +2 -3
  24. adcp/types/generated_poc/core/creative_asset.py +14 -14
  25. adcp/types/generated_poc/core/creative_assignment.py +4 -4
  26. adcp/types/generated_poc/core/creative_filters.py +20 -20
  27. adcp/types/generated_poc/core/creative_manifest.py +3 -3
  28. adcp/types/generated_poc/core/creative_policy.py +5 -5
  29. adcp/types/generated_poc/core/delivery_metrics.py +33 -33
  30. adcp/types/generated_poc/core/deployment.py +21 -21
  31. adcp/types/generated_poc/core/destination.py +12 -12
  32. adcp/types/generated_poc/core/error.py +9 -9
  33. adcp/types/generated_poc/core/ext.py +2 -3
  34. adcp/types/generated_poc/core/format.py +139 -51
  35. adcp/types/generated_poc/core/format_id.py +6 -6
  36. adcp/types/generated_poc/core/frequency_cap.py +3 -3
  37. adcp/types/generated_poc/core/identifier.py +27 -0
  38. adcp/types/generated_poc/core/mcp_webhook_payload.py +10 -10
  39. adcp/types/generated_poc/core/measurement.py +9 -9
  40. adcp/types/generated_poc/core/media_buy.py +8 -8
  41. adcp/types/generated_poc/core/package.py +9 -9
  42. adcp/types/generated_poc/core/performance_feedback.py +19 -19
  43. adcp/types/generated_poc/core/placement.py +5 -5
  44. adcp/types/generated_poc/core/pricing_option.py +2 -2
  45. adcp/types/generated_poc/core/product.py +21 -21
  46. adcp/types/generated_poc/core/product_filters.py +19 -19
  47. adcp/types/generated_poc/core/promoted_offerings.py +21 -21
  48. adcp/types/generated_poc/core/promoted_products.py +3 -3
  49. adcp/types/generated_poc/core/property.py +10 -10
  50. adcp/types/generated_poc/core/property_id.py +4 -4
  51. adcp/types/generated_poc/core/property_list_ref.py +26 -0
  52. adcp/types/generated_poc/core/property_tag.py +4 -4
  53. adcp/types/generated_poc/core/protocol_envelope.py +9 -9
  54. adcp/types/generated_poc/core/publisher_property_selector.py +14 -14
  55. adcp/types/generated_poc/core/push_notification_config.py +5 -5
  56. adcp/types/generated_poc/core/reporting_capabilities.py +9 -9
  57. adcp/types/generated_poc/core/response.py +5 -5
  58. adcp/types/generated_poc/core/signal_filters.py +6 -6
  59. adcp/types/generated_poc/core/start_timing.py +5 -5
  60. adcp/types/generated_poc/core/sub_asset.py +15 -15
  61. adcp/types/generated_poc/core/targeting.py +9 -9
  62. adcp/types/generated_poc/creative/list_creative_formats_request.py +21 -21
  63. adcp/types/generated_poc/creative/list_creative_formats_response.py +6 -6
  64. adcp/types/generated_poc/creative/preview_creative_request.py +26 -26
  65. adcp/types/generated_poc/creative/preview_creative_response.py +31 -30
  66. adcp/types/generated_poc/creative/preview_render.py +26 -26
  67. adcp/types/generated_poc/enums/adcp_domain.py +5 -3
  68. adcp/types/generated_poc/enums/asset_content_type.py +13 -13
  69. adcp/types/generated_poc/enums/auth_scheme.py +2 -2
  70. adcp/types/generated_poc/enums/available_metric.py +9 -9
  71. adcp/types/generated_poc/enums/channels.py +9 -9
  72. adcp/types/generated_poc/enums/co_branding_requirement.py +3 -3
  73. adcp/types/generated_poc/enums/creative_action.py +5 -5
  74. adcp/types/generated_poc/enums/creative_agent_capability.py +4 -4
  75. adcp/types/generated_poc/enums/creative_sort_field.py +6 -6
  76. adcp/types/generated_poc/enums/creative_status.py +4 -4
  77. adcp/types/generated_poc/enums/daast_tracking_event.py +11 -11
  78. adcp/types/generated_poc/enums/daast_version.py +2 -2
  79. adcp/types/generated_poc/enums/delivery_type.py +2 -2
  80. adcp/types/generated_poc/enums/dimension_unit.py +4 -4
  81. adcp/types/generated_poc/enums/feed_format.py +3 -3
  82. adcp/types/generated_poc/enums/feedback_source.py +4 -4
  83. adcp/types/generated_poc/enums/format_category.py +7 -7
  84. adcp/types/generated_poc/enums/format_id_parameter.py +2 -2
  85. adcp/types/generated_poc/enums/frequency_cap_scope.py +3 -3
  86. adcp/types/generated_poc/enums/history_entry_type.py +2 -2
  87. adcp/types/generated_poc/enums/http_method.py +2 -2
  88. adcp/types/generated_poc/enums/identifier_types.py +19 -19
  89. adcp/types/generated_poc/enums/javascript_module_type.py +3 -3
  90. adcp/types/generated_poc/enums/landing_page_requirement.py +3 -3
  91. adcp/types/generated_poc/enums/markdown_flavor.py +2 -2
  92. adcp/types/generated_poc/enums/media_buy_status.py +4 -4
  93. adcp/types/generated_poc/enums/metric_type.py +8 -8
  94. adcp/types/generated_poc/enums/notification_type.py +4 -4
  95. adcp/types/generated_poc/enums/pacing.py +3 -3
  96. adcp/types/generated_poc/enums/preview_output_format.py +2 -2
  97. adcp/types/generated_poc/enums/pricing_model.py +7 -7
  98. adcp/types/generated_poc/enums/property_type.py +7 -7
  99. adcp/types/generated_poc/enums/publisher_identifier_types.py +5 -5
  100. adcp/types/generated_poc/enums/reporting_frequency.py +3 -3
  101. adcp/types/generated_poc/enums/signal_catalog_type.py +3 -3
  102. adcp/types/generated_poc/enums/sort_direction.py +2 -2
  103. adcp/types/generated_poc/enums/standard_format_ids.py +35 -35
  104. adcp/types/generated_poc/enums/task_status.py +9 -9
  105. adcp/types/generated_poc/enums/task_type.py +12 -6
  106. adcp/types/generated_poc/enums/update_frequency.py +4 -4
  107. adcp/types/generated_poc/enums/url_asset_type.py +3 -3
  108. adcp/types/generated_poc/enums/validation_mode.py +2 -2
  109. adcp/types/generated_poc/enums/vast_tracking_event.py +16 -16
  110. adcp/types/generated_poc/enums/vast_version.py +5 -5
  111. adcp/types/generated_poc/enums/webhook_response_type.py +4 -4
  112. adcp/types/generated_poc/enums/webhook_security_method.py +3 -3
  113. adcp/types/generated_poc/extensions/__init__.py +3 -0
  114. adcp/types/generated_poc/extensions/extension_meta.py +50 -0
  115. adcp/types/generated_poc/media_buy/build_creative_request.py +5 -5
  116. adcp/types/generated_poc/media_buy/build_creative_response.py +7 -7
  117. adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +6 -6
  118. adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +2 -2
  119. adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +6 -6
  120. adcp/types/generated_poc/media_buy/create_media_buy_request.py +64 -23
  121. adcp/types/generated_poc/media_buy/create_media_buy_response.py +8 -8
  122. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +9 -9
  123. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +52 -52
  124. adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +7 -7
  125. adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +3 -3
  126. adcp/types/generated_poc/media_buy/get_products_async_response_working.py +5 -5
  127. adcp/types/generated_poc/media_buy/get_products_request.py +11 -5
  128. adcp/types/generated_poc/media_buy/get_products_response.py +10 -4
  129. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +4 -4
  130. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +8 -8
  131. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +10 -10
  132. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +6 -6
  133. adcp/types/generated_poc/media_buy/list_creatives_request.py +24 -24
  134. adcp/types/generated_poc/media_buy/list_creatives_response.py +53 -53
  135. adcp/types/generated_poc/media_buy/package_request.py +16 -7
  136. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +20 -20
  137. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +7 -7
  138. adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +6 -6
  139. adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +2 -2
  140. adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +8 -8
  141. adcp/types/generated_poc/media_buy/sync_creatives_request.py +8 -8
  142. adcp/types/generated_poc/media_buy/sync_creatives_response.py +16 -16
  143. adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +5 -5
  144. adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +2 -2
  145. adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +6 -6
  146. adcp/types/generated_poc/media_buy/update_media_buy_request.py +37 -29
  147. adcp/types/generated_poc/media_buy/update_media_buy_response.py +8 -8
  148. adcp/types/generated_poc/pricing_options/cpc_option.py +9 -9
  149. adcp/types/generated_poc/pricing_options/cpcv_option.py +9 -9
  150. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +14 -14
  151. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +9 -9
  152. adcp/types/generated_poc/pricing_options/cpp_option.py +14 -14
  153. adcp/types/generated_poc/pricing_options/cpv_option.py +13 -13
  154. adcp/types/generated_poc/pricing_options/flat_rate_option.py +16 -16
  155. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +14 -14
  156. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +9 -9
  157. adcp/types/generated_poc/property/__init__.py +3 -0
  158. adcp/types/generated_poc/property/base_property_source.py +86 -0
  159. adcp/types/generated_poc/property/create_property_list_request.py +43 -0
  160. adcp/types/generated_poc/property/create_property_list_response.py +27 -0
  161. adcp/types/generated_poc/property/delete_property_list_request.py +22 -0
  162. adcp/types/generated_poc/property/delete_property_list_response.py +21 -0
  163. adcp/types/generated_poc/property/feature_requirement.py +42 -0
  164. adcp/types/generated_poc/property/get_property_list_request.py +34 -0
  165. adcp/types/generated_poc/property/get_property_list_response.py +61 -0
  166. adcp/types/generated_poc/property/list_property_features_request.py +25 -0
  167. adcp/types/generated_poc/property/list_property_features_response.py +24 -0
  168. adcp/types/generated_poc/property/list_property_lists_request.py +29 -0
  169. adcp/types/generated_poc/property/list_property_lists_response.py +39 -0
  170. adcp/types/generated_poc/property/property_error.py +33 -0
  171. adcp/types/generated_poc/property/property_feature.py +22 -0
  172. adcp/types/generated_poc/property/property_feature_definition.py +80 -0
  173. adcp/types/generated_poc/property/property_list.py +62 -0
  174. adcp/types/generated_poc/property/property_list_changed_webhook.py +51 -0
  175. adcp/types/generated_poc/property/property_list_filters.py +47 -0
  176. adcp/types/generated_poc/property/update_property_list_request.py +46 -0
  177. adcp/types/generated_poc/property/update_property_list_response.py +21 -0
  178. adcp/types/generated_poc/protocols/adcp_extension.py +26 -10
  179. adcp/types/generated_poc/signals/activate_signal_request.py +4 -4
  180. adcp/types/generated_poc/signals/activate_signal_response.py +7 -7
  181. adcp/types/generated_poc/signals/get_signals_request.py +9 -9
  182. adcp/types/generated_poc/signals/get_signals_response.py +16 -16
  183. adcp/utils/__init__.py +24 -1
  184. adcp/utils/format_assets.py +224 -0
  185. adcp/utils/preview_cache.py +29 -7
  186. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/METADATA +1 -1
  187. adcp-2.19.0.dist-info/RECORD +220 -0
  188. adcp-2.17.0.dist-info/RECORD +0 -194
  189. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/WHEEL +0 -0
  190. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/entry_points.txt +0 -0
  191. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/licenses/LICENSE +0 -0
  192. {adcp-2.17.0.dist-info → adcp-2.19.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creatives_request.json
3
- # timestamp: 2025-11-29T12:00:45+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='forbid',
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='forbid',
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='forbid',
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
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/list_creatives_response.json
3
- # timestamp: 2025-12-11T15:09:37+00:00
3
+ # timestamp: 2026-01-08T19:25:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -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='forbid',
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='forbid',
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='forbid',
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='forbid',
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='forbid',
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='forbid',
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='forbid',
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='forbid',
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
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/package_request.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-14T17:08:13+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,12 +17,12 @@ from ..enums import pacing as pacing_1
17
17
 
18
18
  class PackageRequest(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='forbid',
20
+ extra="allow",
21
21
  )
22
22
  bid_price: Annotated[
23
23
  float | None,
24
24
  Field(
25
- description='Bid price for auction-based CPM pricing (required if using cpm-auction-option)',
25
+ description="Bid price for auction-based CPM pricing (required if using cpm-auction-option)",
26
26
  ge=0.0,
27
27
  ),
28
28
  ] = None
@@ -34,13 +34,13 @@ class PackageRequest(AdCPBaseModel):
34
34
  creative_ids: Annotated[
35
35
  list[str] | None,
36
36
  Field(
37
- description='Creative IDs to assign to this package at creation time (references existing library creatives)'
37
+ description="Creative IDs to assign to this package at creation time (references existing library creatives)"
38
38
  ),
39
39
  ] = None
40
40
  creatives: Annotated[
41
41
  list[creative_asset.CreativeAsset] | None,
42
42
  Field(
43
- description='Full creative objects to upload and assign to this package at creation time (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.',
43
+ description="Full creative objects to upload and assign to this package at creation time (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.",
44
44
  max_length=100,
45
45
  ),
46
46
  ] = None
@@ -48,16 +48,25 @@ class PackageRequest(AdCPBaseModel):
48
48
  format_ids: Annotated[
49
49
  list[format_id.FormatId] | None,
50
50
  Field(
51
- description='Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.',
51
+ description="Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.",
52
52
  min_length=1,
53
53
  ),
54
54
  ] = None
55
+ impressions: Annotated[
56
+ float | None, Field(description="Impression goal for this package", ge=0.0)
57
+ ] = None
55
58
  pacing: pacing_1.Pacing | None = None
59
+ paused: Annotated[
60
+ bool | None,
61
+ Field(
62
+ description="Whether this package should be created in a paused state. Paused packages do not deliver impressions. Defaults to false."
63
+ ),
64
+ ] = False
56
65
  pricing_option_id: Annotated[
57
66
  str,
58
67
  Field(
59
68
  description="ID of the selected pricing option from the product's pricing_options array"
60
69
  ),
61
70
  ]
62
- product_id: Annotated[str, Field(description='Product ID for this package')]
71
+ product_id: Annotated[str, Field(description="Product ID for this package")]
63
72
  targeting_overlay: targeting.TargetingOverlay | None = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/provide_performance_feedback_request.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-08T19:25:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -17,19 +17,19 @@ from ..enums import metric_type as metric_type_1
17
17
 
18
18
  class MeasurementPeriod(AdCPBaseModel):
19
19
  model_config = ConfigDict(
20
- extra='forbid',
20
+ extra="allow",
21
21
  )
22
22
  end: Annotated[
23
- AwareDatetime, Field(description='ISO 8601 end timestamp for measurement period')
23
+ AwareDatetime, Field(description="ISO 8601 end timestamp for measurement period")
24
24
  ]
25
25
  start: Annotated[
26
- AwareDatetime, Field(description='ISO 8601 start timestamp for measurement period')
26
+ AwareDatetime, Field(description="ISO 8601 start timestamp for measurement period")
27
27
  ]
28
28
 
29
29
 
30
30
  class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
31
31
  model_config = ConfigDict(
32
- extra='forbid',
32
+ extra="allow",
33
33
  )
34
34
  buyer_ref: Annotated[
35
35
  str | None, Field(description="Buyer's reference for the media buy", min_length=1)
@@ -38,33 +38,33 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
38
38
  creative_id: Annotated[
39
39
  str | None,
40
40
  Field(
41
- description='Specific creative asset (if feedback is creative-specific)', min_length=1
41
+ description="Specific creative asset (if feedback is creative-specific)", min_length=1
42
42
  ),
43
43
  ] = None
44
44
  ext: ext_1.ExtensionObject | None = None
45
45
  feedback_source: Annotated[
46
- feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
46
+ feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data")
47
47
  ] = feedback_source_1.FeedbackSource.buyer_attribution
48
48
  measurement_period: Annotated[
49
- MeasurementPeriod, Field(description='Time period for performance measurement')
49
+ MeasurementPeriod, Field(description="Time period for performance measurement")
50
50
  ]
51
51
  media_buy_id: Annotated[
52
52
  str, Field(description="Publisher's media buy identifier", min_length=1)
53
53
  ]
54
54
  metric_type: Annotated[
55
- metric_type_1.MetricType | None, Field(description='The business metric being measured')
55
+ metric_type_1.MetricType | None, Field(description="The business metric being measured")
56
56
  ] = metric_type_1.MetricType.overall_performance
57
57
  package_id: Annotated[
58
58
  str | None,
59
59
  Field(
60
- description='Specific package within the media buy (if feedback is package-specific)',
60
+ description="Specific package within the media buy (if feedback is package-specific)",
61
61
  min_length=1,
62
62
  ),
63
63
  ] = None
64
64
  performance_index: Annotated[
65
65
  float,
66
66
  Field(
67
- description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
67
+ description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)",
68
68
  ge=0.0,
69
69
  ),
70
70
  ]
@@ -72,7 +72,7 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
72
72
 
73
73
  class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
74
74
  model_config = ConfigDict(
75
- extra='forbid',
75
+ extra="allow",
76
76
  )
77
77
  buyer_ref: Annotated[
78
78
  str, Field(description="Buyer's reference for the media buy", min_length=1)
@@ -81,33 +81,33 @@ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
81
81
  creative_id: Annotated[
82
82
  str | None,
83
83
  Field(
84
- description='Specific creative asset (if feedback is creative-specific)', min_length=1
84
+ description="Specific creative asset (if feedback is creative-specific)", min_length=1
85
85
  ),
86
86
  ] = None
87
87
  ext: ext_1.ExtensionObject | None = None
88
88
  feedback_source: Annotated[
89
- feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
89
+ feedback_source_1.FeedbackSource | None, Field(description="Source of the performance data")
90
90
  ] = feedback_source_1.FeedbackSource.buyer_attribution
91
91
  measurement_period: Annotated[
92
- MeasurementPeriod, Field(description='Time period for performance measurement')
92
+ MeasurementPeriod, Field(description="Time period for performance measurement")
93
93
  ]
94
94
  media_buy_id: Annotated[
95
95
  str | None, Field(description="Publisher's media buy identifier", min_length=1)
96
96
  ] = None
97
97
  metric_type: Annotated[
98
- metric_type_1.MetricType | None, Field(description='The business metric being measured')
98
+ metric_type_1.MetricType | None, Field(description="The business metric being measured")
99
99
  ] = metric_type_1.MetricType.overall_performance
100
100
  package_id: Annotated[
101
101
  str | None,
102
102
  Field(
103
- description='Specific package within the media buy (if feedback is package-specific)',
103
+ description="Specific package within the media buy (if feedback is package-specific)",
104
104
  min_length=1,
105
105
  ),
106
106
  ] = None
107
107
  performance_index: Annotated[
108
108
  float,
109
109
  Field(
110
- description='Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)',
110
+ description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)",
111
111
  ge=0.0,
112
112
  ),
113
113
  ]
@@ -119,7 +119,7 @@ class ProvidePerformanceFeedbackRequest(
119
119
  root: Annotated[
120
120
  ProvidePerformanceFeedbackRequest1 | ProvidePerformanceFeedbackRequest2,
121
121
  Field(
122
- description='Request payload for provide_performance_feedback task',
123
- title='Provide Performance Feedback Request',
122
+ description="Request payload for provide_performance_feedback task",
123
+ title="Provide Performance Feedback Request",
124
124
  ),
125
125
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/provide_performance_feedback_response.json
3
- # timestamp: 2025-11-29T12:00:45+00:00
3
+ # timestamp: 2026-01-08T19:25:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -16,25 +16,25 @@ from ..core import ext as ext_1
16
16
 
17
17
  class ProvidePerformanceFeedbackResponse1(AdCPBaseModel):
18
18
  model_config = ConfigDict(
19
- extra='forbid',
19
+ extra="allow",
20
20
  )
21
21
  context: context_1.ContextObject | None = None
22
22
  ext: ext_1.ExtensionObject | None = None
23
23
  success: Annotated[
24
24
  Literal[True],
25
- Field(description='Whether the performance feedback was successfully received'),
25
+ Field(description="Whether the performance feedback was successfully received"),
26
26
  ]
27
27
 
28
28
 
29
29
  class ProvidePerformanceFeedbackResponse2(AdCPBaseModel):
30
30
  model_config = ConfigDict(
31
- extra='forbid',
31
+ extra="allow",
32
32
  )
33
33
  context: context_1.ContextObject | None = None
34
34
  errors: Annotated[
35
35
  list[error.Error],
36
36
  Field(
37
- description='Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)',
37
+ description="Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)",
38
38
  min_length=1,
39
39
  ),
40
40
  ]
@@ -47,7 +47,7 @@ class ProvidePerformanceFeedbackResponse(
47
47
  root: Annotated[
48
48
  ProvidePerformanceFeedbackResponse1 | ProvidePerformanceFeedbackResponse2,
49
49
  Field(
50
- description='Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.',
51
- title='Provide Performance Feedback Response',
50
+ description="Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.",
51
+ title="Provide Performance Feedback Response",
52
52
  ),
53
53
  ]
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/sync_creatives_async_response_input_required.json
3
- # timestamp: 2025-12-18T20:00:24+00:00
3
+ # timestamp: 2026-01-08T19:25:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -15,17 +15,17 @@ from ..core import ext as ext_1
15
15
 
16
16
 
17
17
  class Reason(Enum):
18
- APPROVAL_REQUIRED = 'APPROVAL_REQUIRED'
19
- ASSET_CONFIRMATION = 'ASSET_CONFIRMATION'
20
- FORMAT_CLARIFICATION = 'FORMAT_CLARIFICATION'
18
+ APPROVAL_REQUIRED = "APPROVAL_REQUIRED"
19
+ ASSET_CONFIRMATION = "ASSET_CONFIRMATION"
20
+ FORMAT_CLARIFICATION = "FORMAT_CLARIFICATION"
21
21
 
22
22
 
23
23
  class SyncCreativesInputRequired(AdCPBaseModel):
24
24
  model_config = ConfigDict(
25
- extra='forbid',
25
+ extra="allow",
26
26
  )
27
27
  context: context_1.ContextObject | None = None
28
28
  ext: ext_1.ExtensionObject | None = None
29
29
  reason: Annotated[
30
- Reason | None, Field(description='Reason code indicating why buyer input is needed')
30
+ Reason | None, Field(description="Reason code indicating why buyer input is needed")
31
31
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: media_buy/sync_creatives_async_response_submitted.json
3
- # timestamp: 2025-12-11T15:09:37+00:00
3
+ # timestamp: 2026-01-08T19:25:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -13,7 +13,7 @@ from ..core import ext as ext_1
13
13
 
14
14
  class SyncCreativesSubmitted(AdCPBaseModel):
15
15
  model_config = ConfigDict(
16
- extra='forbid',
16
+ extra="allow",
17
17
  )
18
18
  context: context_1.ContextObject | None = None
19
19
  ext: ext_1.ExtensionObject | None = None