adcp 2.11.1__py3-none-any.whl → 2.12.1__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 (170) hide show
  1. adcp/ADCP_VERSION +1 -0
  2. adcp/__init__.py +24 -3
  3. adcp/__main__.py +31 -3
  4. adcp/client.py +16 -0
  5. adcp/protocols/a2a.py +178 -25
  6. adcp/protocols/base.py +23 -4
  7. adcp/protocols/mcp.py +44 -0
  8. adcp/types/__init__.py +2 -26
  9. adcp/types/_generated.py +179 -158
  10. adcp/types/generated_poc/adagents.py +221 -25
  11. adcp/types/generated_poc/core/__init__.py +3 -0
  12. adcp/types/generated_poc/{activation_key.py → core/activation_key.py} +2 -2
  13. adcp/types/generated_poc/core/assets/__init__.py +3 -0
  14. adcp/types/generated_poc/{audio_asset.py → core/assets/audio_asset.py} +2 -2
  15. adcp/types/generated_poc/{css_asset.py → core/assets/css_asset.py} +2 -2
  16. adcp/types/generated_poc/{daast_asset.py → core/assets/daast_asset.py} +4 -4
  17. adcp/types/generated_poc/{html_asset.py → core/assets/html_asset.py} +2 -2
  18. adcp/types/generated_poc/core/assets/image_asset.py +19 -0
  19. adcp/types/generated_poc/{javascript_asset.py → core/assets/javascript_asset.py} +3 -3
  20. adcp/types/generated_poc/{text_asset.py → core/assets/text_asset.py} +2 -2
  21. adcp/types/generated_poc/{url_asset.py → core/assets/url_asset.py} +3 -3
  22. adcp/types/generated_poc/{vast_asset.py → core/assets/vast_asset.py} +4 -4
  23. adcp/types/generated_poc/{video_asset.py → core/assets/video_asset.py} +7 -11
  24. adcp/types/generated_poc/{webhook_asset.py → core/assets/webhook_asset.py} +3 -3
  25. adcp/types/generated_poc/{brand_manifest.py → core/brand_manifest.py} +3 -3
  26. adcp/types/generated_poc/core/context.py +15 -0
  27. adcp/types/generated_poc/{creative_asset.py → core/creative_asset.py} +25 -6
  28. adcp/types/generated_poc/{creative_assignment.py → core/creative_assignment.py} +2 -2
  29. adcp/types/generated_poc/{creative_filters.py → core/creative_filters.py} +12 -3
  30. adcp/types/generated_poc/{creative_manifest.py → core/creative_manifest.py} +13 -6
  31. adcp/types/generated_poc/{creative_policy.py → core/creative_policy.py} +3 -3
  32. adcp/types/generated_poc/{delivery_metrics.py → core/delivery_metrics.py} +2 -2
  33. adcp/types/generated_poc/{deployment.py → core/deployment.py} +2 -2
  34. adcp/types/generated_poc/{destination.py → core/destination.py} +2 -2
  35. adcp/types/generated_poc/core/dimensions.py +18 -0
  36. adcp/types/generated_poc/{error.py → core/error.py} +2 -2
  37. adcp/types/generated_poc/core/ext.py +15 -0
  38. adcp/types/generated_poc/{format.py → core/format.py} +85 -54
  39. adcp/types/generated_poc/core/format_id.py +50 -0
  40. adcp/types/generated_poc/{frequency_cap.py → core/frequency_cap.py} +2 -2
  41. adcp/types/generated_poc/{measurement.py → core/measurement.py} +2 -2
  42. adcp/types/generated_poc/{media_buy.py → core/media_buy.py} +6 -3
  43. adcp/types/generated_poc/{package.py → core/package.py} +13 -6
  44. adcp/types/generated_poc/{performance_feedback.py → core/performance_feedback.py} +4 -4
  45. adcp/types/generated_poc/{placement.py → core/placement.py} +3 -3
  46. adcp/types/generated_poc/{product.py → core/product.py} +16 -6
  47. adcp/types/generated_poc/core/product_filters.py +97 -0
  48. adcp/types/generated_poc/{promoted_offerings.py → core/promoted_offerings.py} +2 -2
  49. adcp/types/generated_poc/{promoted_products.py → core/promoted_products.py} +2 -2
  50. adcp/types/generated_poc/{property.py → core/property.py} +5 -4
  51. adcp/types/generated_poc/{property_id.py → core/property_id.py} +2 -2
  52. adcp/types/generated_poc/{property_tag.py → core/property_tag.py} +2 -2
  53. adcp/types/generated_poc/{protocol_envelope.py → core/protocol_envelope.py} +3 -3
  54. adcp/types/generated_poc/{publisher_property_selector.py → core/publisher_property_selector.py} +2 -2
  55. adcp/types/generated_poc/{push_notification_config.py → core/push_notification_config.py} +3 -3
  56. adcp/types/generated_poc/{reporting_capabilities.py → core/reporting_capabilities.py} +3 -3
  57. adcp/types/generated_poc/{response.py → core/response.py} +2 -2
  58. adcp/types/generated_poc/{signal_filters.py → core/signal_filters.py} +3 -3
  59. adcp/types/generated_poc/{sub_asset.py → core/sub_asset.py} +2 -2
  60. adcp/types/generated_poc/{targeting.py → core/targeting.py} +2 -2
  61. adcp/types/generated_poc/{webhook_payload.py → core/webhook_payload.py} +4 -4
  62. adcp/types/generated_poc/creative/__init__.py +3 -0
  63. adcp/types/generated_poc/creative/list_creative_formats_request.py +88 -0
  64. adcp/types/generated_poc/creative/list_creative_formats_response.py +55 -0
  65. adcp/types/generated_poc/{preview_creative_request.py → creative/preview_creative_request.py} +13 -18
  66. adcp/types/generated_poc/{preview_creative_response.py → creative/preview_creative_response.py} +8 -14
  67. adcp/types/generated_poc/{preview_render.py → creative/preview_render.py} +2 -2
  68. adcp/types/generated_poc/enums/__init__.py +3 -0
  69. adcp/types/generated_poc/{adcp_domain.py → enums/adcp_domain.py} +2 -2
  70. adcp/types/generated_poc/{asset_content_type.py → enums/asset_content_type.py} +2 -2
  71. adcp/types/generated_poc/{auth_scheme.py → enums/auth_scheme.py} +2 -2
  72. adcp/types/generated_poc/{available_metric.py → enums/available_metric.py} +2 -2
  73. adcp/types/generated_poc/{channels.py → enums/channels.py} +2 -2
  74. adcp/types/generated_poc/{co_branding_requirement.py → enums/co_branding_requirement.py} +2 -2
  75. adcp/types/generated_poc/{creative_action.py → enums/creative_action.py} +2 -2
  76. adcp/types/generated_poc/{creative_agent_capability.py → enums/creative_agent_capability.py} +2 -2
  77. adcp/types/generated_poc/{creative_sort_field.py → enums/creative_sort_field.py} +2 -2
  78. adcp/types/generated_poc/{creative_status.py → enums/creative_status.py} +2 -2
  79. adcp/types/generated_poc/{daast_tracking_event.py → enums/daast_tracking_event.py} +2 -2
  80. adcp/types/generated_poc/{daast_version.py → enums/daast_version.py} +2 -2
  81. adcp/types/generated_poc/{delivery_type.py → enums/delivery_type.py} +2 -2
  82. adcp/types/generated_poc/{dimension_unit.py → enums/dimension_unit.py} +2 -2
  83. adcp/types/generated_poc/{feed_format.py → enums/feed_format.py} +2 -2
  84. adcp/types/generated_poc/{feedback_source.py → enums/feedback_source.py} +2 -2
  85. adcp/types/generated_poc/{format_category.py → enums/format_category.py} +2 -2
  86. adcp/types/generated_poc/enums/format_id_parameter.py +12 -0
  87. adcp/types/generated_poc/{frequency_cap_scope.py → enums/frequency_cap_scope.py} +2 -2
  88. adcp/types/generated_poc/{history_entry_type.py → enums/history_entry_type.py} +2 -2
  89. adcp/types/generated_poc/{http_method.py → enums/http_method.py} +2 -2
  90. adcp/types/generated_poc/{identifier_types.py → enums/identifier_types.py} +2 -2
  91. adcp/types/generated_poc/{javascript_module_type.py → enums/javascript_module_type.py} +2 -2
  92. adcp/types/generated_poc/{landing_page_requirement.py → enums/landing_page_requirement.py} +2 -2
  93. adcp/types/generated_poc/{markdown_flavor.py → enums/markdown_flavor.py} +2 -2
  94. adcp/types/generated_poc/{media_buy_status.py → enums/media_buy_status.py} +2 -2
  95. adcp/types/generated_poc/{metric_type.py → enums/metric_type.py} +2 -2
  96. adcp/types/generated_poc/{notification_type.py → enums/notification_type.py} +2 -2
  97. adcp/types/generated_poc/{pacing.py → enums/pacing.py} +2 -2
  98. adcp/types/generated_poc/{preview_output_format.py → enums/preview_output_format.py} +2 -2
  99. adcp/types/generated_poc/{pricing_model.py → enums/pricing_model.py} +2 -2
  100. adcp/types/generated_poc/{property_type.py → enums/property_type.py} +2 -2
  101. adcp/types/generated_poc/{publisher_identifier_types.py → enums/publisher_identifier_types.py} +2 -2
  102. adcp/types/generated_poc/{reporting_frequency.py → enums/reporting_frequency.py} +2 -2
  103. adcp/types/generated_poc/{signal_catalog_type.py → enums/signal_catalog_type.py} +2 -2
  104. adcp/types/generated_poc/{sort_direction.py → enums/sort_direction.py} +2 -2
  105. adcp/types/generated_poc/{standard_format_ids.py → enums/standard_format_ids.py} +2 -2
  106. adcp/types/generated_poc/{task_status.py → enums/task_status.py} +2 -2
  107. adcp/types/generated_poc/{task_type.py → enums/task_type.py} +2 -2
  108. adcp/types/generated_poc/{update_frequency.py → enums/update_frequency.py} +2 -2
  109. adcp/types/generated_poc/{url_asset_type.py → enums/url_asset_type.py} +2 -2
  110. adcp/types/generated_poc/{validation_mode.py → enums/validation_mode.py} +2 -2
  111. adcp/types/generated_poc/{vast_tracking_event.py → enums/vast_tracking_event.py} +2 -2
  112. adcp/types/generated_poc/{vast_version.py → enums/vast_version.py} +2 -2
  113. adcp/types/generated_poc/{webhook_response_type.py → enums/webhook_response_type.py} +2 -2
  114. adcp/types/generated_poc/{webhook_security_method.py → enums/webhook_security_method.py} +2 -2
  115. adcp/types/generated_poc/media_buy/__init__.py +3 -0
  116. adcp/types/generated_poc/{build_creative_request.py → media_buy/build_creative_request.py} +9 -11
  117. adcp/types/generated_poc/{build_creative_response.py → media_buy/build_creative_response.py} +11 -17
  118. adcp/types/generated_poc/{create_media_buy_request.py → media_buy/create_media_buy_request.py} +9 -11
  119. adcp/types/generated_poc/{create_media_buy_response.py → media_buy/create_media_buy_response.py} +11 -16
  120. adcp/types/generated_poc/{get_media_buy_delivery_request.py → media_buy/get_media_buy_delivery_request.py} +8 -10
  121. adcp/types/generated_poc/{get_media_buy_delivery_response.py → media_buy/get_media_buy_delivery_response.py} +27 -12
  122. adcp/types/generated_poc/{get_products_request.py → media_buy/get_products_request.py} +9 -11
  123. adcp/types/generated_poc/{get_products_response.py → media_buy/get_products_response.py} +9 -10
  124. adcp/types/generated_poc/{list_authorized_properties_request.py → media_buy/list_authorized_properties_request.py} +8 -9
  125. adcp/types/generated_poc/{list_authorized_properties_response.py → media_buy/list_authorized_properties_response.py} +9 -10
  126. adcp/types/generated_poc/{list_creative_formats_request.py → media_buy/list_creative_formats_request.py} +9 -10
  127. adcp/types/generated_poc/{list_creative_formats_response.py → media_buy/list_creative_formats_response.py} +10 -10
  128. adcp/types/generated_poc/{list_creatives_request.py → media_buy/list_creatives_request.py} +9 -10
  129. adcp/types/generated_poc/{list_creatives_response.py → media_buy/list_creatives_response.py} +14 -15
  130. adcp/types/generated_poc/{package_request.py → media_buy/package_request.py} +7 -5
  131. adcp/types/generated_poc/{provide_performance_feedback_request.py → media_buy/provide_performance_feedback_request.py} +11 -17
  132. adcp/types/generated_poc/{provide_performance_feedback_response.py → media_buy/provide_performance_feedback_response.py} +10 -16
  133. adcp/types/generated_poc/{sync_creatives_request.py → media_buy/sync_creatives_request.py} +14 -15
  134. adcp/types/generated_poc/{sync_creatives_response.py → media_buy/sync_creatives_response.py} +11 -16
  135. adcp/types/generated_poc/{update_media_buy_request.py → media_buy/update_media_buy_request.py} +63 -28
  136. adcp/types/generated_poc/{update_media_buy_response.py → media_buy/update_media_buy_response.py} +11 -16
  137. adcp/types/generated_poc/pricing_options/__init__.py +3 -0
  138. adcp/types/generated_poc/{cpc_option.py → pricing_options/cpc_option.py} +2 -2
  139. adcp/types/generated_poc/{cpcv_option.py → pricing_options/cpcv_option.py} +2 -2
  140. adcp/types/generated_poc/{cpm_auction_option.py → pricing_options/cpm_auction_option.py} +2 -2
  141. adcp/types/generated_poc/{cpm_fixed_option.py → pricing_options/cpm_fixed_option.py} +2 -2
  142. adcp/types/generated_poc/{cpp_option.py → pricing_options/cpp_option.py} +2 -2
  143. adcp/types/generated_poc/{cpv_option.py → pricing_options/cpv_option.py} +2 -2
  144. adcp/types/generated_poc/{flat_rate_option.py → pricing_options/flat_rate_option.py} +2 -2
  145. adcp/types/generated_poc/{vcpm_auction_option.py → pricing_options/vcpm_auction_option.py} +2 -2
  146. adcp/types/generated_poc/{vcpm_fixed_option.py → pricing_options/vcpm_fixed_option.py} +2 -2
  147. adcp/types/generated_poc/protocols/__init__.py +3 -0
  148. adcp/types/generated_poc/protocols/adcp_extension.py +37 -0
  149. adcp/types/generated_poc/signals/__init__.py +3 -0
  150. adcp/types/generated_poc/{activate_signal_request.py → signals/activate_signal_request.py} +8 -10
  151. adcp/types/generated_poc/{activate_signal_response.py → signals/activate_signal_response.py} +10 -16
  152. adcp/types/generated_poc/{get_signals_request.py → signals/get_signals_request.py} +9 -10
  153. adcp/types/generated_poc/{get_signals_response.py → signals/get_signals_response.py} +9 -10
  154. adcp/utils/preview_cache.py +15 -3
  155. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/METADATA +1 -1
  156. adcp-2.12.1.dist-info/RECORD +176 -0
  157. adcp/types/generated_poc/format_id.py +0 -29
  158. adcp/types/generated_poc/image_asset.py +0 -23
  159. adcp/types/generated_poc/markdown_asset.py +0 -39
  160. adcp/types/generated_poc/package_status.py +0 -14
  161. adcp/types/generated_poc/product_filters.py +0 -36
  162. adcp/types/generated_poc/tasks_get_request.py +0 -29
  163. adcp/types/generated_poc/tasks_get_response.py +0 -112
  164. adcp/types/generated_poc/tasks_list_request.py +0 -115
  165. adcp/types/generated_poc/tasks_list_response.py +0 -122
  166. adcp-2.11.1.dist-info/RECORD +0 -166
  167. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/WHEEL +0 -0
  168. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/entry_points.txt +0 -0
  169. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/licenses/LICENSE +0 -0
  170. {adcp-2.11.1.dist-info → adcp-2.12.1.dist-info}/top_level.txt +0 -0
@@ -1,15 +1,17 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: get-media-buy-delivery-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/get_media_buy_delivery_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import media_buy_status
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+ from ..enums import media_buy_status
13
15
 
14
16
 
15
17
  class GetMediaBuyDeliveryRequest(AdCPBaseModel):
@@ -19,12 +21,7 @@ class GetMediaBuyDeliveryRequest(AdCPBaseModel):
19
21
  buyer_refs: Annotated[
20
22
  list[str] | None, Field(description='Array of buyer reference IDs to get delivery data for')
21
23
  ] = None
22
- context: Annotated[
23
- dict[str, Any] | None,
24
- Field(
25
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
26
- ),
27
- ] = None
24
+ context: context_1.ContextObject | None = None
28
25
  end_date: Annotated[
29
26
  str | None,
30
27
  Field(
@@ -32,6 +29,7 @@ class GetMediaBuyDeliveryRequest(AdCPBaseModel):
32
29
  pattern='^\\d{4}-\\d{2}-\\d{2}$',
33
30
  ),
34
31
  ] = None
32
+ ext: ext_1.ExtensionObject | None = None
35
33
  media_buy_ids: Annotated[
36
34
  list[str] | None,
37
35
  Field(description='Array of publisher media buy IDs to get delivery data for'),
@@ -1,18 +1,20 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: get-media-buy-delivery-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/get_media_buy_delivery_response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from enum import Enum
8
- from typing import Annotated, Any
8
+ from typing import Annotated
9
9
 
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
- from . import error
14
- from . import pricing_model as pricing_model_1
15
- from .delivery_metrics import DeliveryMetrics
13
+ from ..core import context as context_1
14
+ from ..core import error
15
+ from ..core import ext as ext_1
16
+ from ..core.delivery_metrics import DeliveryMetrics
17
+ from ..enums import pricing_model as pricing_model_1
16
18
 
17
19
 
18
20
  class AggregatedTotals(AdCPBaseModel):
@@ -36,6 +38,14 @@ class AggregatedTotals(AdCPBaseModel):
36
38
  ] = None
37
39
 
38
40
 
41
+ class DeliveryStatus(Enum):
42
+ delivering = 'delivering'
43
+ completed = 'completed'
44
+ budget_exhausted = 'budget_exhausted'
45
+ flight_ended = 'flight_ended'
46
+ goal_met = 'goal_met'
47
+
48
+
39
49
  class DailyBreakdownItem(AdCPBaseModel):
40
50
  model_config = ConfigDict(
41
51
  extra='forbid',
@@ -96,11 +106,20 @@ class ByPackageItem(DeliveryMetrics):
96
106
  pattern='^[A-Z]{3}$',
97
107
  ),
98
108
  ]
109
+ delivery_status: Annotated[
110
+ DeliveryStatus | None,
111
+ Field(
112
+ description='System-reported operational state of this package. Reflects actual delivery state independent of buyer pause control.'
113
+ ),
114
+ ] = None
99
115
  pacing_index: Annotated[
100
116
  float | None,
101
117
  Field(description='Delivery pace (1.0 = on track, <1.0 = behind, >1.0 = ahead)', ge=0.0),
102
118
  ] = None
103
119
  package_id: Annotated[str, Field(description="Publisher's package identifier")]
120
+ paused: Annotated[
121
+ bool | None, Field(description='Whether this package is currently paused by the buyer')
122
+ ] = None
104
123
  pricing_model: Annotated[
105
124
  pricing_model_1.PricingModel,
106
125
  Field(
@@ -163,12 +182,7 @@ class GetMediaBuyDeliveryResponse(AdCPBaseModel):
163
182
  description='Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.'
164
183
  ),
165
184
  ] = None
166
- context: Annotated[
167
- dict[str, Any] | None,
168
- Field(
169
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
170
- ),
171
- ] = None
185
+ context: context_1.ContextObject | None = None
172
186
  currency: Annotated[str, Field(description='ISO 4217 currency code', pattern='^[A-Z]{3}$')]
173
187
  errors: Annotated[
174
188
  list[error.Error] | None,
@@ -176,6 +190,7 @@ class GetMediaBuyDeliveryResponse(AdCPBaseModel):
176
190
  description='Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)'
177
191
  ),
178
192
  ] = None
193
+ ext: ext_1.ExtensionObject | None = None
179
194
  media_buy_deliveries: Annotated[
180
195
  list[MediaBuyDelivery],
181
196
  Field(
@@ -1,16 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: get-products-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/get_products_request.json
3
+ # timestamp: 2025-11-22T15:29:34+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, ConfigDict, Field
11
11
 
12
- from . import brand_manifest as brand_manifest_1
13
- from . import product_filters
12
+ from ..core import brand_manifest as brand_manifest_1
13
+ from ..core import context as context_1
14
+ from ..core import ext as ext_1
15
+ from ..core import product_filters
14
16
 
15
17
 
16
18
  class GetProductsRequest(AdCPBaseModel):
@@ -41,10 +43,6 @@ class GetProductsRequest(AdCPBaseModel):
41
43
  brief: Annotated[
42
44
  str | None, Field(description='Natural language description of campaign requirements')
43
45
  ] = None
44
- context: Annotated[
45
- dict[str, Any] | None,
46
- Field(
47
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
48
- ),
49
- ] = None
46
+ context: context_1.ContextObject | None = None
47
+ ext: ext_1.ExtensionObject | None = None
50
48
  filters: product_filters.ProductFilters | None = None
@@ -1,29 +1,28 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: get-products-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/get_products_response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import error, product
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
15
+ from ..core import product
13
16
 
14
17
 
15
18
  class GetProductsResponse(AdCPBaseModel):
16
19
  model_config = ConfigDict(
17
20
  extra='forbid',
18
21
  )
19
- context: Annotated[
20
- dict[str, Any] | None,
21
- Field(
22
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
23
- ),
24
- ] = None
22
+ context: context_1.ContextObject | None = None
25
23
  errors: Annotated[
26
24
  list[error.Error] | None,
27
25
  Field(description='Task-specific errors and warnings (e.g., product filtering issues)'),
28
26
  ] = None
27
+ ext: ext_1.ExtensionObject | None = None
29
28
  products: Annotated[list[product.Product], Field(description='Array of matching products')]
@@ -1,14 +1,17 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-authorized-properties-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/list_authorized_properties_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field, RootModel
11
11
 
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+
12
15
 
13
16
  class PublisherDomain(RootModel[str]):
14
17
  root: Annotated[
@@ -24,12 +27,8 @@ class ListAuthorizedPropertiesRequest(AdCPBaseModel):
24
27
  model_config = ConfigDict(
25
28
  extra='forbid',
26
29
  )
27
- context: Annotated[
28
- dict[str, Any] | None,
29
- Field(
30
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
31
- ),
32
- ] = None
30
+ context: context_1.ContextObject | None = None
31
+ ext: ext_1.ExtensionObject | None = None
33
32
  publisher_domains: Annotated[
34
33
  list[PublisherDomain] | None,
35
34
  Field(
@@ -1,15 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-authorized-properties-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/list_authorized_properties_response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
- from . import channels, error
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
15
+ from ..enums import channels
13
16
 
14
17
 
15
18
  class PrimaryCountry(RootModel[str]):
@@ -38,16 +41,12 @@ class ListAuthorizedPropertiesResponse(AdCPBaseModel):
38
41
  min_length=1,
39
42
  ),
40
43
  ] = None
41
- context: Annotated[
42
- dict[str, Any] | None,
43
- Field(
44
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
45
- ),
46
- ] = None
44
+ context: context_1.ContextObject | None = None
47
45
  errors: Annotated[
48
46
  list[error.Error] | None,
49
47
  Field(description='Task-specific errors and warnings (e.g., property availability issues)'),
50
48
  ] = None
49
+ ext: ext_1.ExtensionObject | None = None
51
50
  last_updated: Annotated[
52
51
  AwareDatetime | None,
53
52
  Field(
@@ -1,15 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-creative-formats-request.json
3
- # timestamp: 2025-11-20T11:58:34+00:00
2
+ # filename: media_buy/list_creative_formats_request.json
3
+ # timestamp: 2025-11-22T19:54:03+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import asset_content_type, format_category, format_id
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+ from ..core import format_id
15
+ from ..enums import asset_content_type, format_category
13
16
 
14
17
 
15
18
  class ListCreativeFormatsRequest(AdCPBaseModel):
@@ -22,12 +25,8 @@ class ListCreativeFormatsRequest(AdCPBaseModel):
22
25
  description="Filter to formats that include these asset types. For third-party tags, search for 'html' or 'javascript'. E.g., ['image', 'text'] returns formats with images and text, ['javascript'] returns formats accepting JavaScript tags."
23
26
  ),
24
27
  ] = None
25
- context: Annotated[
26
- dict[str, Any] | None,
27
- Field(
28
- description='Initiator-provided context included in the request payload. Agents must echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
29
- ),
30
- ] = None
28
+ context: context_1.ContextObject | None = None
29
+ ext: ext_1.ExtensionObject | None = None
31
30
  format_ids: Annotated[
32
31
  list[format_id.FormatId] | None,
33
32
  Field(
@@ -1,15 +1,19 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-creative-formats-response.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/list_creative_formats_response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, ConfigDict, Field
11
11
 
12
- from . import creative_agent_capability, error, format
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
15
+ from ..core import format
16
+ from ..enums import creative_agent_capability
13
17
 
14
18
 
15
19
  class CreativeAgent(AdCPBaseModel):
@@ -32,12 +36,7 @@ class ListCreativeFormatsResponse(AdCPBaseModel):
32
36
  model_config = ConfigDict(
33
37
  extra='forbid',
34
38
  )
35
- context: Annotated[
36
- dict[str, Any] | None,
37
- Field(
38
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
39
- ),
40
- ] = None
39
+ context: context_1.ContextObject | None = None
41
40
  creative_agents: Annotated[
42
41
  list[CreativeAgent] | None,
43
42
  Field(
@@ -48,6 +47,7 @@ class ListCreativeFormatsResponse(AdCPBaseModel):
48
47
  list[error.Error] | None,
49
48
  Field(description='Task-specific errors and warnings (e.g., format availability issues)'),
50
49
  ] = None
50
+ ext: ext_1.ExtensionObject | None = None
51
51
  formats: Annotated[
52
52
  list[format.Format],
53
53
  Field(
@@ -1,16 +1,19 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-creatives-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/list_creatives_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from enum import Enum
8
- from typing import Annotated, Any
8
+ from typing import Annotated
9
9
 
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import ConfigDict, Field
12
12
 
13
- from . import creative_filters, creative_sort_field, sort_direction
13
+ from ..core import context as context_1
14
+ from ..core import creative_filters
15
+ from ..core import ext as ext_1
16
+ from ..enums import creative_sort_field, sort_direction
14
17
 
15
18
 
16
19
  class FieldModel(Enum):
@@ -52,12 +55,8 @@ class ListCreativesRequest(AdCPBaseModel):
52
55
  model_config = ConfigDict(
53
56
  extra='forbid',
54
57
  )
55
- context: Annotated[
56
- dict[str, Any] | None,
57
- Field(
58
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
59
- ),
60
- ] = None
58
+ context: context_1.ContextObject | None = None
59
+ ext: ext_1.ExtensionObject | None = None
61
60
  fields: Annotated[
62
61
  list[FieldModel] | None,
63
62
  Field(description='Specific fields to include in response (omit for all fields)'),
@@ -1,29 +1,32 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: list-creatives-response.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: media_buy/list_creatives_response.json
3
+ # timestamp: 2025-11-22T19:54:03+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
7
  from enum import Enum
8
- from typing import Annotated, Any
8
+ from typing import Annotated
9
9
 
10
10
  from adcp.types.base import AdCPBaseModel
11
11
  from pydantic import AwareDatetime, ConfigDict, Field
12
12
 
13
- from . import audio_asset, creative_status, css_asset, daast_asset
14
- from . import format_id as format_id_1
15
- from . import (
13
+ from ..core import context as context_1
14
+ from ..core import ext as ext_1
15
+ from ..core import format_id as format_id_1
16
+ from ..core import promoted_offerings, sub_asset
17
+ from ..core.assets import (
18
+ audio_asset,
19
+ css_asset,
20
+ daast_asset,
16
21
  html_asset,
17
22
  image_asset,
18
23
  javascript_asset,
19
- promoted_offerings,
20
- sort_direction,
21
- sub_asset,
22
24
  text_asset,
23
25
  url_asset,
24
26
  vast_asset,
25
27
  video_asset,
26
28
  )
29
+ from ..enums import creative_status, sort_direction
27
30
 
28
31
 
29
32
  class Status(Enum):
@@ -192,15 +195,11 @@ class ListCreativesResponse(AdCPBaseModel):
192
195
  model_config = ConfigDict(
193
196
  extra='forbid',
194
197
  )
195
- context: Annotated[
196
- dict[str, Any] | None,
197
- Field(
198
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
199
- ),
200
- ] = None
198
+ context: context_1.ContextObject | None = None
201
199
  creatives: Annotated[
202
200
  list[Creative], Field(description='Array of creative assets matching the query')
203
201
  ]
202
+ ext: ext_1.ExtensionObject | None = None
204
203
  format_summary: Annotated[
205
204
  dict[str, int] | None, Field(description='Breakdown of creatives by format type')
206
205
  ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: package-request.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/package_request.json
3
+ # timestamp: 2025-11-22T19:54:03+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,9 +9,10 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import creative_asset, format_id
13
- from . import pacing as pacing_1
14
- from . import targeting
12
+ from ..core import creative_asset
13
+ from ..core import ext as ext_1
14
+ from ..core import format_id, targeting
15
+ from ..enums import pacing as pacing_1
15
16
 
16
17
 
17
18
  class PackageRequest(AdCPBaseModel):
@@ -43,6 +44,7 @@ class PackageRequest(AdCPBaseModel):
43
44
  max_length=100,
44
45
  ),
45
46
  ] = None
47
+ ext: ext_1.ExtensionObject | None = None
46
48
  format_ids: Annotated[
47
49
  list[format_id.FormatId] | None,
48
50
  Field(
@@ -1,16 +1,18 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: provide-performance-feedback-request.json
3
- # timestamp: 2025-11-21T15:57:17+00:00
2
+ # filename: media_buy/provide_performance_feedback_request.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any
7
+ from typing import Annotated
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
- from . import feedback_source as feedback_source_1
13
- from . import metric_type as metric_type_1
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+ from ..enums import feedback_source as feedback_source_1
15
+ from ..enums import metric_type as metric_type_1
14
16
 
15
17
 
16
18
  class MeasurementPeriod(AdCPBaseModel):
@@ -32,18 +34,14 @@ class ProvidePerformanceFeedbackRequest1(AdCPBaseModel):
32
34
  buyer_ref: Annotated[
33
35
  str | None, Field(description="Buyer's reference for the media buy", min_length=1)
34
36
  ] = None
35
- context: Annotated[
36
- dict[str, Any] | None,
37
- Field(
38
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
39
- ),
40
- ] = None
37
+ context: context_1.ContextObject | None = None
41
38
  creative_id: Annotated[
42
39
  str | None,
43
40
  Field(
44
41
  description='Specific creative asset (if feedback is creative-specific)', min_length=1
45
42
  ),
46
43
  ] = None
44
+ ext: ext_1.ExtensionObject | None = None
47
45
  feedback_source: Annotated[
48
46
  feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
49
47
  ] = feedback_source_1.FeedbackSource.buyer_attribution
@@ -79,18 +77,14 @@ class ProvidePerformanceFeedbackRequest2(AdCPBaseModel):
79
77
  buyer_ref: Annotated[
80
78
  str, Field(description="Buyer's reference for the media buy", min_length=1)
81
79
  ]
82
- context: Annotated[
83
- dict[str, Any] | None,
84
- Field(
85
- description='Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.'
86
- ),
87
- ] = None
80
+ context: context_1.ContextObject | None = None
88
81
  creative_id: Annotated[
89
82
  str | None,
90
83
  Field(
91
84
  description='Specific creative asset (if feedback is creative-specific)', min_length=1
92
85
  ),
93
86
  ] = None
87
+ ext: ext_1.ExtensionObject | None = None
94
88
  feedback_source: Annotated[
95
89
  feedback_source_1.FeedbackSource | None, Field(description='Source of the performance data')
96
90
  ] = feedback_source_1.FeedbackSource.buyer_attribution
@@ -1,27 +1,25 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: provide-performance-feedback-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: media_buy/provide_performance_feedback_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
7
- from typing import Annotated, Any, Literal
7
+ from typing import Annotated, Literal
8
8
 
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field, RootModel
11
11
 
12
- from . import error
12
+ from ..core import context as context_1
13
+ from ..core import error
14
+ from ..core import ext as ext_1
13
15
 
14
16
 
15
17
  class ProvidePerformanceFeedbackResponse1(AdCPBaseModel):
16
18
  model_config = ConfigDict(
17
19
  extra='forbid',
18
20
  )
19
- context: Annotated[
20
- dict[str, Any] | None,
21
- Field(
22
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
23
- ),
24
- ] = None
21
+ context: context_1.ContextObject | None = None
22
+ ext: ext_1.ExtensionObject | None = None
25
23
  success: Annotated[
26
24
  Literal[True],
27
25
  Field(description='Whether the performance feedback was successfully received'),
@@ -32,12 +30,7 @@ class ProvidePerformanceFeedbackResponse2(AdCPBaseModel):
32
30
  model_config = ConfigDict(
33
31
  extra='forbid',
34
32
  )
35
- context: Annotated[
36
- dict[str, Any] | None,
37
- Field(
38
- description='Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
39
- ),
40
- ] = None
33
+ context: context_1.ContextObject | None = None
41
34
  errors: Annotated[
42
35
  list[error.Error],
43
36
  Field(
@@ -45,6 +38,7 @@ class ProvidePerformanceFeedbackResponse2(AdCPBaseModel):
45
38
  min_length=1,
46
39
  ),
47
40
  ]
41
+ ext: ext_1.ExtensionObject | None = None
48
42
 
49
43
 
50
44
  class ProvidePerformanceFeedbackResponse(