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
@@ -0,0 +1,97 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: core/product_filters.json
3
+ # timestamp: 2025-11-22T19:54:03+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from datetime import date
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field, RootModel
12
+
13
+ from ..enums import channels as channels_1
14
+ from ..enums import delivery_type as delivery_type_1
15
+ from ..enums import format_category
16
+ from . import format_id
17
+
18
+
19
+ class BudgetRange(AdCPBaseModel):
20
+ model_config = ConfigDict(
21
+ extra='forbid',
22
+ )
23
+ currency: Annotated[
24
+ str,
25
+ Field(
26
+ description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$'
27
+ ),
28
+ ]
29
+ max: Annotated[float | None, Field(description='Maximum budget amount', ge=0.0)] = None
30
+ min: Annotated[float, Field(description='Minimum budget amount', ge=0.0)]
31
+
32
+
33
+ class BudgetRange1(AdCPBaseModel):
34
+ model_config = ConfigDict(
35
+ extra='forbid',
36
+ )
37
+ currency: Annotated[
38
+ str,
39
+ Field(
40
+ description="ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP')", pattern='^[A-Z]{3}$'
41
+ ),
42
+ ]
43
+ max: Annotated[float, Field(description='Maximum budget amount', ge=0.0)]
44
+ min: Annotated[float | None, Field(description='Minimum budget amount', ge=0.0)] = None
45
+
46
+
47
+ class Country(RootModel[str]):
48
+ root: Annotated[str, Field(pattern='^[A-Z]{2}$')]
49
+
50
+
51
+ class ProductFilters(AdCPBaseModel):
52
+ model_config = ConfigDict(
53
+ extra='forbid',
54
+ )
55
+ budget_range: Annotated[
56
+ BudgetRange | BudgetRange1 | None,
57
+ Field(description='Budget range to filter appropriate products'),
58
+ ] = None
59
+ channels: Annotated[
60
+ list[channels_1.AdvertisingChannels] | None,
61
+ Field(description="Filter by advertising channels (e.g., ['display', 'video', 'dooh'])"),
62
+ ] = None
63
+ countries: Annotated[
64
+ list[Country] | None,
65
+ Field(
66
+ description="Filter by target countries using ISO 3166-1 alpha-2 country codes (e.g., ['US', 'CA', 'GB'])"
67
+ ),
68
+ ] = None
69
+ delivery_type: delivery_type_1.DeliveryType | None = None
70
+ end_date: Annotated[
71
+ date | None,
72
+ Field(
73
+ description='Campaign end date (ISO 8601 date format: YYYY-MM-DD) for availability checks'
74
+ ),
75
+ ] = None
76
+ format_ids: Annotated[
77
+ list[format_id.FormatId] | None, Field(description='Filter by specific format IDs')
78
+ ] = None
79
+ format_types: Annotated[
80
+ list[format_category.FormatCategory] | None, Field(description='Filter by format types')
81
+ ] = None
82
+ is_fixed_price: Annotated[
83
+ bool | None, Field(description='Filter for fixed price vs auction products')
84
+ ] = None
85
+ min_exposures: Annotated[
86
+ int | None,
87
+ Field(description='Minimum exposures/impressions needed for measurement validity', ge=1),
88
+ ] = None
89
+ standard_formats_only: Annotated[
90
+ bool | None, Field(description='Only return products accepting IAB standard formats')
91
+ ] = None
92
+ start_date: Annotated[
93
+ date | None,
94
+ Field(
95
+ description='Campaign start date (ISO 8601 date format: YYYY-MM-DD) for availability checks'
96
+ ),
97
+ ] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: promoted-offerings.json
3
- # timestamp: 2025-11-18T04:34:42+00:00
2
+ # filename: core/promoted_offerings.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: promoted-products.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: core/promoted_products.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: property.json
3
- # timestamp: 2025-11-21T20:45:16+00:00
2
+ # filename: core/property.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,8 +9,9 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import identifier_types, property_tag
13
- from . import property_type as property_type_1
12
+ from ..enums import identifier_types
13
+ from ..enums import property_type as property_type_1
14
+ from . import property_tag
14
15
 
15
16
 
16
17
  class Identifier(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: property-id.json
3
- # timestamp: 2025-11-21T20:45:16+00:00
2
+ # filename: core/property_id.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: property-tag.json
3
- # timestamp: 2025-11-21T20:45:16+00:00
2
+ # filename: core/property_tag.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: protocol-envelope.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: core/protocol_envelope.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,8 +9,8 @@ from typing import Annotated, Any
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field
11
11
 
12
+ from ..enums import task_status
12
13
  from . import push_notification_config as push_notification_config_1
13
- from . import task_status
14
14
 
15
15
 
16
16
  class ProtocolEnvelope(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: publisher-property-selector.json
3
- # timestamp: 2025-11-21T20:45:16+00:00
2
+ # filename: core/publisher_property_selector.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: push-notification-config.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: core/push_notification_config.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,7 +9,7 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, ConfigDict, Field
11
11
 
12
- from . import auth_scheme
12
+ from ..enums import auth_scheme
13
13
 
14
14
 
15
15
  class Authentication(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: reporting-capabilities.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: core/reporting_capabilities.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,7 +9,7 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import available_metric, reporting_frequency
12
+ from ..enums import available_metric, reporting_frequency
13
13
 
14
14
 
15
15
  class ReportingCapabilities(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: core/response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: signal-filters.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: core/signal_filters.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,7 +9,7 @@ from typing import Annotated
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import ConfigDict, Field
11
11
 
12
- from . import signal_catalog_type
12
+ from ..enums import signal_catalog_type
13
13
 
14
14
 
15
15
  class SignalFilters(AdCPBaseModel):
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: sub-asset.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: core/sub_asset.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: targeting.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: core/targeting.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: webhook-payload.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: core/webhook_payload.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,8 +9,8 @@ from typing import Annotated, Any
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AwareDatetime, ConfigDict, Field
11
11
 
12
- from . import adcp_domain, task_status
13
- from . import task_type as task_type_1
12
+ from ..enums import adcp_domain, task_status
13
+ from ..enums import task_type as task_type_1
14
14
 
15
15
 
16
16
  class Progress(AdCPBaseModel):
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2025-11-22T15:23:24+00:00
@@ -0,0 +1,88 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: creative/list_creative_formats_request.json
3
+ # timestamp: 2025-11-22T19:54:03+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+ from typing import Annotated
9
+
10
+ from adcp.types.base import AdCPBaseModel
11
+ from pydantic import ConfigDict, Field
12
+
13
+ from ..core import context as context_1
14
+ from ..core import ext as ext_1
15
+ from ..core import format_id
16
+
17
+
18
+ class AssetType(Enum):
19
+ image = 'image'
20
+ video = 'video'
21
+ audio = 'audio'
22
+ text = 'text'
23
+ html = 'html'
24
+ javascript = 'javascript'
25
+ url = 'url'
26
+
27
+
28
+ class Type(Enum):
29
+ audio = 'audio'
30
+ video = 'video'
31
+ display = 'display'
32
+ dooh = 'dooh'
33
+
34
+
35
+ class ListCreativeFormatsRequestCreativeAgent(AdCPBaseModel):
36
+ model_config = ConfigDict(
37
+ extra='forbid',
38
+ )
39
+ asset_types: Annotated[
40
+ list[AssetType] | None,
41
+ Field(
42
+ 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."
43
+ ),
44
+ ] = None
45
+ context: context_1.ContextObject | None = None
46
+ ext: ext_1.ExtensionObject | None = None
47
+ format_ids: Annotated[
48
+ list[format_id.FormatId] | None, Field(description='Return only these specific format IDs')
49
+ ] = None
50
+ is_responsive: Annotated[
51
+ bool | None,
52
+ Field(
53
+ description='Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.'
54
+ ),
55
+ ] = None
56
+ max_height: Annotated[
57
+ int | None,
58
+ Field(
59
+ description='Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats.'
60
+ ),
61
+ ] = None
62
+ max_width: Annotated[
63
+ int | None,
64
+ Field(
65
+ description='Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats.'
66
+ ),
67
+ ] = None
68
+ min_height: Annotated[
69
+ int | None,
70
+ Field(
71
+ description='Minimum height in pixels (inclusive). Returns formats with height >= this value.'
72
+ ),
73
+ ] = None
74
+ min_width: Annotated[
75
+ int | None,
76
+ Field(
77
+ description='Minimum width in pixels (inclusive). Returns formats with width >= this value.'
78
+ ),
79
+ ] = None
80
+ name_search: Annotated[
81
+ str | None, Field(description='Search for formats by name (case-insensitive partial match)')
82
+ ] = None
83
+ type: Annotated[
84
+ Type | None,
85
+ Field(
86
+ description='Filter by format type (technical categories with distinct requirements)'
87
+ ),
88
+ ] = None
@@ -0,0 +1,55 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: creative/list_creative_formats_response.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, ConfigDict, Field
11
+
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
17
+
18
+
19
+ class CreativeAgent(AdCPBaseModel):
20
+ agent_name: Annotated[
21
+ str | None, Field(description='Human-readable name for the creative agent')
22
+ ] = None
23
+ agent_url: Annotated[
24
+ AnyUrl,
25
+ Field(
26
+ description="Base URL for the creative agent (e.g., 'https://reference.adcp.org', 'https://dco.example.com'). Call list_creative_formats on this URL to get its formats."
27
+ ),
28
+ ]
29
+ capabilities: Annotated[
30
+ list[creative_agent_capability.CreativeAgentCapability] | None,
31
+ Field(description='Capabilities this creative agent provides'),
32
+ ] = None
33
+
34
+
35
+ class ListCreativeFormatsResponseCreativeAgent(AdCPBaseModel):
36
+ model_config = ConfigDict(
37
+ extra='forbid',
38
+ )
39
+ context: context_1.ContextObject | None = None
40
+ creative_agents: Annotated[
41
+ list[CreativeAgent] | None,
42
+ Field(
43
+ description='Optional: Creative agents that provide additional formats. Buyers can recursively query these agents to discover more formats. No authentication required for list_creative_formats.'
44
+ ),
45
+ ] = None
46
+ errors: Annotated[
47
+ list[error.Error] | None, Field(description='Task-specific errors and warnings')
48
+ ] = None
49
+ ext: ext_1.ExtensionObject | None = None
50
+ formats: Annotated[
51
+ list[format.Format],
52
+ Field(
53
+ description="Full format definitions for all formats this agent supports. Each format's authoritative source is indicated by its agent_url field."
54
+ ),
55
+ ]
@@ -1,17 +1,19 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: preview-creative-request.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: creative/preview_creative_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, 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 creative_manifest as creative_manifest_1
13
- from . import format_id as format_id_1
14
- from . import preview_output_format
12
+ from ..core import context as context_1
13
+ from ..core import creative_manifest as creative_manifest_1
14
+ from ..core import ext as ext_1
15
+ from ..core import format_id as format_id_1
16
+ from ..enums import preview_output_format
15
17
 
16
18
 
17
19
  class Input(AdCPBaseModel):
@@ -56,18 +58,14 @@ class PreviewCreativeRequest1(AdCPBaseModel):
56
58
  model_config = ConfigDict(
57
59
  extra='forbid',
58
60
  )
59
- context: Annotated[
60
- dict[str, Any] | None,
61
- Field(
62
- 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.'
63
- ),
64
- ] = None
61
+ context: context_1.ContextObject | None = None
65
62
  creative_manifest: Annotated[
66
63
  creative_manifest_1.CreativeManifest,
67
64
  Field(
68
65
  description='Complete creative manifest with all required assets (including promoted_offerings if required by the format)'
69
66
  ),
70
67
  ]
68
+ ext: ext_1.ExtensionObject | None = None
71
69
  format_id: Annotated[
72
70
  format_id_1.FormatId, Field(description='Format identifier for rendering the preview')
73
71
  ]
@@ -122,12 +120,8 @@ class PreviewCreativeRequest2(AdCPBaseModel):
122
120
  model_config = ConfigDict(
123
121
  extra='forbid',
124
122
  )
125
- context: Annotated[
126
- dict[str, Any] | None,
127
- Field(
128
- 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.'
129
- ),
130
- ] = None
123
+ context: context_1.ContextObject | None = None
124
+ ext: ext_1.ExtensionObject | None = None
131
125
  output_format: Annotated[
132
126
  preview_output_format.PreviewOutputFormat | None,
133
127
  Field(
@@ -152,6 +146,7 @@ class PreviewCreativeRequest(RootModel[PreviewCreativeRequest1 | PreviewCreative
152
146
  root: Annotated[
153
147
  PreviewCreativeRequest1 | PreviewCreativeRequest2,
154
148
  Field(
149
+ discriminator='request_type',
155
150
  description='Request to generate previews of one or more creative manifests. Accepts either a single creative request or an array of requests for batch processing.',
156
151
  title='Preview Creative Request',
157
152
  ),
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: preview-creative-response.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: creative/preview_creative_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -9,6 +9,8 @@ from typing import Annotated, Any, Literal
9
9
  from adcp.types.base import AdCPBaseModel
10
10
  from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
11
11
 
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
12
14
  from . import preview_render
13
15
 
14
16
 
@@ -64,15 +66,11 @@ class PreviewCreativeResponse1(AdCPBaseModel):
64
66
  model_config = ConfigDict(
65
67
  extra='forbid',
66
68
  )
67
- context: Annotated[
68
- dict[str, Any] | None,
69
- Field(
70
- description='Initiator-provided context echoed inside the preview payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
71
- ),
72
- ] = None
69
+ context: context_1.ContextObject | None = None
73
70
  expires_at: Annotated[
74
71
  AwareDatetime, Field(description='ISO 8601 timestamp when preview links expire')
75
72
  ]
73
+ ext: ext_1.ExtensionObject | None = None
76
74
  interactive_url: Annotated[
77
75
  AnyUrl | None,
78
76
  Field(
@@ -146,12 +144,8 @@ class PreviewCreativeResponse2(AdCPBaseModel):
146
144
  model_config = ConfigDict(
147
145
  extra='forbid',
148
146
  )
149
- context: Annotated[
150
- dict[str, Any] | None,
151
- Field(
152
- description='Initiator-provided context echoed inside the preview payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.'
153
- ),
154
- ] = None
147
+ context: context_1.ContextObject | None = None
148
+ ext: ext_1.ExtensionObject | None = None
155
149
  response_type: Annotated[
156
150
  Literal['batch'],
157
151
  Field(description='Discriminator indicating this is a batch preview response'),
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: preview-render.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: creative/preview_render.json
3
+ # timestamp: 2025-11-22T15:29:34+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -0,0 +1,3 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: .schema_temp
3
+ # timestamp: 2025-11-22T15:23:24+00:00
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: adcp-domain.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/adcp_domain.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: asset-content-type.json
3
- # timestamp: 2025-11-20T11:58:34+00:00
2
+ # filename: enums/asset_content_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: auth-scheme.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/auth_scheme.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: available-metric.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/available_metric.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: channels.json
3
- # timestamp: 2025-11-18T03:35:10+00:00
2
+ # filename: enums/channels.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: co-branding-requirement.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/co_branding_requirement.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: creative-action.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/creative_action.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
- # filename: creative-agent-capability.json
3
- # timestamp: 2025-11-21T12:49:05+00:00
2
+ # filename: enums/creative_agent_capability.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
4
 
5
5
  from __future__ import annotations
6
6