adcp 2.12.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 (176) hide show
  1. adcp/__init__.py +364 -0
  2. adcp/__main__.py +440 -0
  3. adcp/adagents.py +642 -0
  4. adcp/client.py +1057 -0
  5. adcp/config.py +82 -0
  6. adcp/exceptions.py +185 -0
  7. adcp/protocols/__init__.py +9 -0
  8. adcp/protocols/a2a.py +484 -0
  9. adcp/protocols/base.py +190 -0
  10. adcp/protocols/mcp.py +440 -0
  11. adcp/py.typed +0 -0
  12. adcp/simple.py +451 -0
  13. adcp/testing/__init__.py +53 -0
  14. adcp/testing/test_helpers.py +311 -0
  15. adcp/types/__init__.py +561 -0
  16. adcp/types/_generated.py +237 -0
  17. adcp/types/aliases.py +748 -0
  18. adcp/types/base.py +26 -0
  19. adcp/types/core.py +174 -0
  20. adcp/types/generated_poc/__init__.py +3 -0
  21. adcp/types/generated_poc/adagents.py +411 -0
  22. adcp/types/generated_poc/core/__init__.py +3 -0
  23. adcp/types/generated_poc/core/activation_key.py +30 -0
  24. adcp/types/generated_poc/core/assets/__init__.py +3 -0
  25. adcp/types/generated_poc/core/assets/audio_asset.py +26 -0
  26. adcp/types/generated_poc/core/assets/css_asset.py +20 -0
  27. adcp/types/generated_poc/core/assets/daast_asset.py +61 -0
  28. adcp/types/generated_poc/core/assets/html_asset.py +18 -0
  29. adcp/types/generated_poc/core/assets/image_asset.py +19 -0
  30. adcp/types/generated_poc/core/assets/javascript_asset.py +23 -0
  31. adcp/types/generated_poc/core/assets/text_asset.py +20 -0
  32. adcp/types/generated_poc/core/assets/url_asset.py +28 -0
  33. adcp/types/generated_poc/core/assets/vast_asset.py +63 -0
  34. adcp/types/generated_poc/core/assets/video_asset.py +24 -0
  35. adcp/types/generated_poc/core/assets/webhook_asset.py +53 -0
  36. adcp/types/generated_poc/core/brand_manifest.py +201 -0
  37. adcp/types/generated_poc/core/context.py +15 -0
  38. adcp/types/generated_poc/core/creative_asset.py +102 -0
  39. adcp/types/generated_poc/core/creative_assignment.py +27 -0
  40. adcp/types/generated_poc/core/creative_filters.py +86 -0
  41. adcp/types/generated_poc/core/creative_manifest.py +68 -0
  42. adcp/types/generated_poc/core/creative_policy.py +28 -0
  43. adcp/types/generated_poc/core/delivery_metrics.py +111 -0
  44. adcp/types/generated_poc/core/deployment.py +78 -0
  45. adcp/types/generated_poc/core/destination.py +43 -0
  46. adcp/types/generated_poc/core/dimensions.py +18 -0
  47. adcp/types/generated_poc/core/error.py +29 -0
  48. adcp/types/generated_poc/core/ext.py +15 -0
  49. adcp/types/generated_poc/core/format.py +260 -0
  50. adcp/types/generated_poc/core/format_id.py +50 -0
  51. adcp/types/generated_poc/core/frequency_cap.py +19 -0
  52. adcp/types/generated_poc/core/measurement.py +40 -0
  53. adcp/types/generated_poc/core/media_buy.py +40 -0
  54. adcp/types/generated_poc/core/package.py +68 -0
  55. adcp/types/generated_poc/core/performance_feedback.py +78 -0
  56. adcp/types/generated_poc/core/placement.py +37 -0
  57. adcp/types/generated_poc/core/product.py +164 -0
  58. adcp/types/generated_poc/core/product_filters.py +97 -0
  59. adcp/types/generated_poc/core/promoted_offerings.py +102 -0
  60. adcp/types/generated_poc/core/promoted_products.py +38 -0
  61. adcp/types/generated_poc/core/property.py +64 -0
  62. adcp/types/generated_poc/core/property_id.py +21 -0
  63. adcp/types/generated_poc/core/property_tag.py +21 -0
  64. adcp/types/generated_poc/core/protocol_envelope.py +61 -0
  65. adcp/types/generated_poc/core/publisher_property_selector.py +75 -0
  66. adcp/types/generated_poc/core/push_notification_config.py +51 -0
  67. adcp/types/generated_poc/core/reporting_capabilities.py +51 -0
  68. adcp/types/generated_poc/core/response.py +24 -0
  69. adcp/types/generated_poc/core/signal_filters.py +29 -0
  70. adcp/types/generated_poc/core/sub_asset.py +55 -0
  71. adcp/types/generated_poc/core/targeting.py +53 -0
  72. adcp/types/generated_poc/core/webhook_payload.py +96 -0
  73. adcp/types/generated_poc/creative/__init__.py +3 -0
  74. adcp/types/generated_poc/creative/list_creative_formats_request.py +88 -0
  75. adcp/types/generated_poc/creative/list_creative_formats_response.py +55 -0
  76. adcp/types/generated_poc/creative/preview_creative_request.py +153 -0
  77. adcp/types/generated_poc/creative/preview_creative_response.py +169 -0
  78. adcp/types/generated_poc/creative/preview_render.py +152 -0
  79. adcp/types/generated_poc/enums/__init__.py +3 -0
  80. adcp/types/generated_poc/enums/adcp_domain.py +12 -0
  81. adcp/types/generated_poc/enums/asset_content_type.py +23 -0
  82. adcp/types/generated_poc/enums/auth_scheme.py +12 -0
  83. adcp/types/generated_poc/enums/available_metric.py +19 -0
  84. adcp/types/generated_poc/enums/channels.py +19 -0
  85. adcp/types/generated_poc/enums/co_branding_requirement.py +13 -0
  86. adcp/types/generated_poc/enums/creative_action.py +15 -0
  87. adcp/types/generated_poc/enums/creative_agent_capability.py +14 -0
  88. adcp/types/generated_poc/enums/creative_sort_field.py +16 -0
  89. adcp/types/generated_poc/enums/creative_status.py +14 -0
  90. adcp/types/generated_poc/enums/daast_tracking_event.py +21 -0
  91. adcp/types/generated_poc/enums/daast_version.py +12 -0
  92. adcp/types/generated_poc/enums/delivery_type.py +12 -0
  93. adcp/types/generated_poc/enums/dimension_unit.py +14 -0
  94. adcp/types/generated_poc/enums/feed_format.py +13 -0
  95. adcp/types/generated_poc/enums/feedback_source.py +14 -0
  96. adcp/types/generated_poc/enums/format_category.py +17 -0
  97. adcp/types/generated_poc/enums/format_id_parameter.py +12 -0
  98. adcp/types/generated_poc/enums/frequency_cap_scope.py +16 -0
  99. adcp/types/generated_poc/enums/history_entry_type.py +12 -0
  100. adcp/types/generated_poc/enums/http_method.py +12 -0
  101. adcp/types/generated_poc/enums/identifier_types.py +29 -0
  102. adcp/types/generated_poc/enums/javascript_module_type.py +13 -0
  103. adcp/types/generated_poc/enums/landing_page_requirement.py +13 -0
  104. adcp/types/generated_poc/enums/markdown_flavor.py +12 -0
  105. adcp/types/generated_poc/enums/media_buy_status.py +14 -0
  106. adcp/types/generated_poc/enums/metric_type.py +18 -0
  107. adcp/types/generated_poc/enums/notification_type.py +14 -0
  108. adcp/types/generated_poc/enums/pacing.py +13 -0
  109. adcp/types/generated_poc/enums/preview_output_format.py +12 -0
  110. adcp/types/generated_poc/enums/pricing_model.py +17 -0
  111. adcp/types/generated_poc/enums/property_type.py +17 -0
  112. adcp/types/generated_poc/enums/publisher_identifier_types.py +15 -0
  113. adcp/types/generated_poc/enums/reporting_frequency.py +13 -0
  114. adcp/types/generated_poc/enums/signal_catalog_type.py +13 -0
  115. adcp/types/generated_poc/enums/sort_direction.py +12 -0
  116. adcp/types/generated_poc/enums/standard_format_ids.py +45 -0
  117. adcp/types/generated_poc/enums/task_status.py +19 -0
  118. adcp/types/generated_poc/enums/task_type.py +15 -0
  119. adcp/types/generated_poc/enums/update_frequency.py +14 -0
  120. adcp/types/generated_poc/enums/url_asset_type.py +13 -0
  121. adcp/types/generated_poc/enums/validation_mode.py +12 -0
  122. adcp/types/generated_poc/enums/vast_tracking_event.py +26 -0
  123. adcp/types/generated_poc/enums/vast_version.py +15 -0
  124. adcp/types/generated_poc/enums/webhook_response_type.py +14 -0
  125. adcp/types/generated_poc/enums/webhook_security_method.py +13 -0
  126. adcp/types/generated_poc/media_buy/__init__.py +3 -0
  127. adcp/types/generated_poc/media_buy/build_creative_request.py +41 -0
  128. adcp/types/generated_poc/media_buy/build_creative_response.py +51 -0
  129. adcp/types/generated_poc/media_buy/create_media_buy_request.py +94 -0
  130. adcp/types/generated_poc/media_buy/create_media_buy_response.py +56 -0
  131. adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +47 -0
  132. adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +235 -0
  133. adcp/types/generated_poc/media_buy/get_products_request.py +48 -0
  134. adcp/types/generated_poc/media_buy/get_products_response.py +28 -0
  135. adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +38 -0
  136. adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +84 -0
  137. adcp/types/generated_poc/media_buy/list_creative_formats_request.py +74 -0
  138. adcp/types/generated_poc/media_buy/list_creative_formats_response.py +56 -0
  139. adcp/types/generated_poc/media_buy/list_creatives_request.py +76 -0
  140. adcp/types/generated_poc/media_buy/list_creatives_response.py +214 -0
  141. adcp/types/generated_poc/media_buy/package_request.py +63 -0
  142. adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +125 -0
  143. adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +53 -0
  144. adcp/types/generated_poc/media_buy/sync_creatives_request.py +63 -0
  145. adcp/types/generated_poc/media_buy/sync_creatives_response.py +105 -0
  146. adcp/types/generated_poc/media_buy/update_media_buy_request.py +195 -0
  147. adcp/types/generated_poc/media_buy/update_media_buy_response.py +55 -0
  148. adcp/types/generated_poc/pricing_options/__init__.py +3 -0
  149. adcp/types/generated_poc/pricing_options/cpc_option.py +43 -0
  150. adcp/types/generated_poc/pricing_options/cpcv_option.py +45 -0
  151. adcp/types/generated_poc/pricing_options/cpm_auction_option.py +58 -0
  152. adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +43 -0
  153. adcp/types/generated_poc/pricing_options/cpp_option.py +64 -0
  154. adcp/types/generated_poc/pricing_options/cpv_option.py +77 -0
  155. adcp/types/generated_poc/pricing_options/flat_rate_option.py +93 -0
  156. adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +61 -0
  157. adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +47 -0
  158. adcp/types/generated_poc/protocols/__init__.py +3 -0
  159. adcp/types/generated_poc/protocols/adcp_extension.py +37 -0
  160. adcp/types/generated_poc/signals/__init__.py +3 -0
  161. adcp/types/generated_poc/signals/activate_signal_request.py +32 -0
  162. adcp/types/generated_poc/signals/activate_signal_response.py +51 -0
  163. adcp/types/generated_poc/signals/get_signals_request.py +53 -0
  164. adcp/types/generated_poc/signals/get_signals_response.py +59 -0
  165. adcp/utils/__init__.py +7 -0
  166. adcp/utils/operation_id.py +15 -0
  167. adcp/utils/preview_cache.py +491 -0
  168. adcp/utils/response_parser.py +171 -0
  169. adcp/validation.py +172 -0
  170. adcp-2.12.0.data/data/ADCP_VERSION +1 -0
  171. adcp-2.12.0.dist-info/METADATA +992 -0
  172. adcp-2.12.0.dist-info/RECORD +176 -0
  173. adcp-2.12.0.dist-info/WHEEL +5 -0
  174. adcp-2.12.0.dist-info/entry_points.txt +2 -0
  175. adcp-2.12.0.dist-info/licenses/LICENSE +17 -0
  176. adcp-2.12.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,29 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/identifier_types.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class PropertyIdentifierTypes(Enum):
11
+ domain = 'domain'
12
+ subdomain = 'subdomain'
13
+ network_id = 'network_id'
14
+ ios_bundle = 'ios_bundle'
15
+ android_package = 'android_package'
16
+ apple_app_store_id = 'apple_app_store_id'
17
+ google_play_id = 'google_play_id'
18
+ roku_store_id = 'roku_store_id'
19
+ fire_tv_asin = 'fire_tv_asin'
20
+ samsung_app_id = 'samsung_app_id'
21
+ apple_tv_bundle = 'apple_tv_bundle'
22
+ bundle_id = 'bundle_id'
23
+ venue_id = 'venue_id'
24
+ screen_id = 'screen_id'
25
+ openooh_venue_type = 'openooh_venue_type'
26
+ rss_url = 'rss_url'
27
+ apple_podcast_id = 'apple_podcast_id'
28
+ spotify_show_id = 'spotify_show_id'
29
+ podcast_guid = 'podcast_guid'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/javascript_module_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class JavascriptModuleType(Enum):
11
+ esm = 'esm'
12
+ commonjs = 'commonjs'
13
+ script = 'script'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/landing_page_requirement.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class LandingPageRequirement(Enum):
11
+ any = 'any'
12
+ retailer_site_only = 'retailer_site_only'
13
+ must_include_retailer = 'must_include_retailer'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/markdown_flavor.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class MarkdownFlavor(Enum):
11
+ commonmark = 'commonmark'
12
+ gfm = 'gfm'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/media_buy_status.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class MediaBuyStatus(Enum):
11
+ pending_activation = 'pending_activation'
12
+ active = 'active'
13
+ paused = 'paused'
14
+ completed = 'completed'
@@ -0,0 +1,18 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/metric_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class MetricType(Enum):
11
+ overall_performance = 'overall_performance'
12
+ conversion_rate = 'conversion_rate'
13
+ brand_lift = 'brand_lift'
14
+ click_through_rate = 'click_through_rate'
15
+ completion_rate = 'completion_rate'
16
+ viewability = 'viewability'
17
+ brand_safety = 'brand_safety'
18
+ cost_efficiency = 'cost_efficiency'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/notification_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class NotificationType(Enum):
11
+ scheduled = 'scheduled'
12
+ final = 'final'
13
+ delayed = 'delayed'
14
+ adjusted = 'adjusted'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/pacing.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class Pacing(Enum):
11
+ even = 'even'
12
+ asap = 'asap'
13
+ front_loaded = 'front_loaded'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/preview_output_format.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class PreviewOutputFormat(Enum):
11
+ url = 'url'
12
+ html = 'html'
@@ -0,0 +1,17 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/pricing_model.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class PricingModel(Enum):
11
+ cpm = 'cpm'
12
+ vcpm = 'vcpm'
13
+ cpc = 'cpc'
14
+ cpcv = 'cpcv'
15
+ cpv = 'cpv'
16
+ cpp = 'cpp'
17
+ flat_rate = 'flat_rate'
@@ -0,0 +1,17 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/property_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class PropertyType(Enum):
11
+ website = 'website'
12
+ mobile_app = 'mobile_app'
13
+ ctv_app = 'ctv_app'
14
+ dooh = 'dooh'
15
+ podcast = 'podcast'
16
+ radio = 'radio'
17
+ streaming_audio = 'streaming_audio'
@@ -0,0 +1,15 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/publisher_identifier_types.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class PublisherIdentifierTypes(Enum):
11
+ tag_id = 'tag_id'
12
+ duns = 'duns'
13
+ lei = 'lei'
14
+ seller_id = 'seller_id'
15
+ gln = 'gln'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/reporting_frequency.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class ReportingFrequency(Enum):
11
+ hourly = 'hourly'
12
+ daily = 'daily'
13
+ monthly = 'monthly'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/signal_catalog_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class SignalCatalogType(Enum):
11
+ marketplace = 'marketplace'
12
+ custom = 'custom'
13
+ owned = 'owned'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/sort_direction.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class SortDirection(Enum):
11
+ asc = 'asc'
12
+ desc = 'desc'
@@ -0,0 +1,45 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/standard_format_ids.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class StandardFormatIds(Enum):
11
+ display_300x250 = 'display_300x250'
12
+ display_728x90 = 'display_728x90'
13
+ display_320x50 = 'display_320x50'
14
+ display_160x600 = 'display_160x600'
15
+ display_970x250 = 'display_970x250'
16
+ display_336x280 = 'display_336x280'
17
+ display_expandable_300x250 = 'display_expandable_300x250'
18
+ display_expandable_728x90 = 'display_expandable_728x90'
19
+ display_interstitial_320x480 = 'display_interstitial_320x480'
20
+ display_interstitial_desktop = 'display_interstitial_desktop'
21
+ display_dynamic_300x250 = 'display_dynamic_300x250'
22
+ display_responsive = 'display_responsive'
23
+ native_in_feed = 'native_in_feed'
24
+ native_content_recommendation = 'native_content_recommendation'
25
+ native_product = 'native_product'
26
+ video_skippable_15s = 'video_skippable_15s'
27
+ video_skippable_30s = 'video_skippable_30s'
28
+ video_non_skippable_15s = 'video_non_skippable_15s'
29
+ video_non_skippable_30s = 'video_non_skippable_30s'
30
+ video_outstream_autoplay = 'video_outstream_autoplay'
31
+ video_vertical_story = 'video_vertical_story'
32
+ video_rewarded_30s = 'video_rewarded_30s'
33
+ video_pause_ad = 'video_pause_ad'
34
+ video_ctv_non_skippable_30s = 'video_ctv_non_skippable_30s'
35
+ audio_standard_15s = 'audio_standard_15s'
36
+ audio_standard_30s = 'audio_standard_30s'
37
+ audio_podcast_host_read = 'audio_podcast_host_read'
38
+ audio_programmatic = 'audio_programmatic'
39
+ universal_carousel = 'universal_carousel'
40
+ universal_canvas = 'universal_canvas'
41
+ universal_takeover = 'universal_takeover'
42
+ universal_gallery = 'universal_gallery'
43
+ universal_reveal = 'universal_reveal'
44
+ dooh_landscape_static = 'dooh_landscape_static'
45
+ dooh_portrait_video = 'dooh_portrait_video'
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/task_status.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class TaskStatus(Enum):
11
+ submitted = 'submitted'
12
+ working = 'working'
13
+ input_required = 'input-required'
14
+ completed = 'completed'
15
+ canceled = 'canceled'
16
+ failed = 'failed'
17
+ rejected = 'rejected'
18
+ auth_required = 'auth-required'
19
+ unknown = 'unknown'
@@ -0,0 +1,15 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/task_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class TaskType(Enum):
11
+ create_media_buy = 'create_media_buy'
12
+ update_media_buy = 'update_media_buy'
13
+ sync_creatives = 'sync_creatives'
14
+ activate_signal = 'activate_signal'
15
+ get_signals = 'get_signals'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/update_frequency.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class UpdateFrequency(Enum):
11
+ realtime = 'realtime'
12
+ hourly = 'hourly'
13
+ daily = 'daily'
14
+ weekly = 'weekly'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/url_asset_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class UrlAssetType(Enum):
11
+ clickthrough = 'clickthrough'
12
+ tracker_pixel = 'tracker_pixel'
13
+ tracker_script = 'tracker_script'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/validation_mode.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class ValidationMode(Enum):
11
+ strict = 'strict'
12
+ lenient = 'lenient'
@@ -0,0 +1,26 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/vast_tracking_event.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class VastTrackingEvent(Enum):
11
+ start = 'start'
12
+ firstQuartile = 'firstQuartile'
13
+ midpoint = 'midpoint'
14
+ thirdQuartile = 'thirdQuartile'
15
+ complete = 'complete'
16
+ impression = 'impression'
17
+ click = 'click'
18
+ pause = 'pause'
19
+ resume = 'resume'
20
+ skip = 'skip'
21
+ mute = 'mute'
22
+ unmute = 'unmute'
23
+ fullscreen = 'fullscreen'
24
+ exitFullscreen = 'exitFullscreen'
25
+ playerExpand = 'playerExpand'
26
+ playerCollapse = 'playerCollapse'
@@ -0,0 +1,15 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/vast_version.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class VastVersion(Enum):
11
+ field_2_0 = '2.0'
12
+ field_3_0 = '3.0'
13
+ field_4_0 = '4.0'
14
+ field_4_1 = '4.1'
15
+ field_4_2 = '4.2'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/webhook_response_type.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class WebhookResponseType(Enum):
11
+ html = 'html'
12
+ json = 'json'
13
+ xml = 'xml'
14
+ javascript = 'javascript'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/webhook_security_method.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class WebhookSecurityMethod(Enum):
11
+ hmac_sha256 = 'hmac_sha256'
12
+ api_key = 'api_key'
13
+ none = 'none'
@@ -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,41 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: media_buy/build_creative_request.json
3
+ # timestamp: 2025-11-22T19:54:03+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 ConfigDict, Field
11
+
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
16
+
17
+
18
+ class BuildCreativeRequest(AdCPBaseModel):
19
+ model_config = ConfigDict(
20
+ extra='forbid',
21
+ )
22
+ context: context_1.ContextObject | None = None
23
+ creative_manifest: Annotated[
24
+ creative_manifest_1.CreativeManifest | None,
25
+ Field(
26
+ description='Creative manifest to transform or generate from. For pure generation, this should include the target format_id and any required input assets (e.g., promoted_offerings for generative formats). For transformation (e.g., resizing, reformatting), this is the complete creative to adapt.'
27
+ ),
28
+ ] = None
29
+ ext: ext_1.ExtensionObject | None = None
30
+ message: Annotated[
31
+ str | None,
32
+ Field(
33
+ description='Natural language instructions for the transformation or generation. For pure generation, this is the creative brief. For transformation, this provides guidance on how to adapt the creative.'
34
+ ),
35
+ ] = None
36
+ target_format_id: Annotated[
37
+ format_id.FormatId,
38
+ Field(
39
+ description='Format ID to generate. The format definition specifies required input assets and output structure.'
40
+ ),
41
+ ]
@@ -0,0 +1,51 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: media_buy/build_creative_response.json
3
+ # timestamp: 2025-11-22T19:16:02+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 ConfigDict, Field, RootModel
11
+
12
+ from ..core import context as context_1
13
+ from ..core import creative_manifest as creative_manifest_1
14
+ from ..core import error
15
+ from ..core import ext as ext_1
16
+
17
+
18
+ class BuildCreativeResponse2(AdCPBaseModel):
19
+ model_config = ConfigDict(
20
+ extra='forbid',
21
+ )
22
+ context: context_1.ContextObject | None = None
23
+ errors: Annotated[
24
+ list[error.Error],
25
+ Field(
26
+ description='Array of errors explaining why creative generation failed', min_length=1
27
+ ),
28
+ ]
29
+ ext: ext_1.ExtensionObject | None = None
30
+
31
+
32
+ class BuildCreativeResponse1(AdCPBaseModel):
33
+ model_config = ConfigDict(
34
+ extra='forbid',
35
+ )
36
+ context: context_1.ContextObject | None = None
37
+ creative_manifest: Annotated[
38
+ creative_manifest_1.CreativeManifest,
39
+ Field(description='The generated or transformed creative manifest'),
40
+ ]
41
+ ext: ext_1.ExtensionObject | None = None
42
+
43
+
44
+ class BuildCreativeResponse(RootModel[BuildCreativeResponse1 | BuildCreativeResponse2]):
45
+ root: Annotated[
46
+ BuildCreativeResponse1 | BuildCreativeResponse2,
47
+ Field(
48
+ description='Response containing the transformed or generated creative manifest, ready for use with preview_creative or sync_creatives. Returns either the complete creative manifest OR error information, never both.',
49
+ title='Build Creative Response',
50
+ ),
51
+ ]
@@ -0,0 +1,94 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: media_buy/create_media_buy_request.json
3
+ # timestamp: 2025-11-22T15:29:34+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 AnyUrl, AwareDatetime, ConfigDict, Field
12
+
13
+ from ..core import brand_manifest as brand_manifest_1
14
+ from ..core import context as context_1
15
+ from ..core import ext as ext_1
16
+ from ..core.push_notification_config import PushNotificationConfig
17
+ from . import package_request
18
+
19
+
20
+ class ReportingFrequency(Enum):
21
+ hourly = 'hourly'
22
+ daily = 'daily'
23
+ monthly = 'monthly'
24
+
25
+
26
+ class RequestedMetric(Enum):
27
+ impressions = 'impressions'
28
+ spend = 'spend'
29
+ clicks = 'clicks'
30
+ ctr = 'ctr'
31
+ video_completions = 'video_completions'
32
+ completion_rate = 'completion_rate'
33
+ conversions = 'conversions'
34
+ viewability = 'viewability'
35
+ engagement_rate = 'engagement_rate'
36
+
37
+
38
+ class ReportingWebhook(PushNotificationConfig):
39
+ reporting_frequency: Annotated[
40
+ ReportingFrequency,
41
+ Field(
42
+ description='Frequency for automated reporting delivery. Must be supported by all products in the media buy.'
43
+ ),
44
+ ]
45
+ requested_metrics: Annotated[
46
+ list[RequestedMetric] | None,
47
+ Field(
48
+ description="Optional list of metrics to include in webhook notifications. If omitted, all available metrics are included. Must be subset of product's available_metrics."
49
+ ),
50
+ ] = None
51
+
52
+
53
+ class CreateMediaBuyRequest(AdCPBaseModel):
54
+ model_config = ConfigDict(
55
+ extra='forbid',
56
+ )
57
+ brand_manifest: Annotated[
58
+ brand_manifest_1.BrandManifest | AnyUrl,
59
+ Field(
60
+ description='Brand information manifest serving as the namespace and identity for this media buy. Provides brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest. Can be cached and reused across multiple requests.',
61
+ examples=[
62
+ {
63
+ 'data': {
64
+ 'colors': {'primary': '#FF6B35'},
65
+ 'name': 'ACME Corporation',
66
+ 'url': 'https://acmecorp.com',
67
+ },
68
+ 'description': 'Inline brand manifest',
69
+ },
70
+ {
71
+ 'data': 'https://cdn.acmecorp.com/brand-manifest.json',
72
+ 'description': 'URL string reference to hosted manifest',
73
+ },
74
+ ],
75
+ title='Brand Manifest Reference',
76
+ ),
77
+ ]
78
+ buyer_ref: Annotated[str, Field(description="Buyer's reference identifier for this media buy")]
79
+ context: context_1.ContextObject | None = None
80
+ end_time: Annotated[
81
+ AwareDatetime, Field(description='Campaign end date/time in ISO 8601 format')
82
+ ]
83
+ ext: ext_1.ExtensionObject | None = None
84
+ packages: Annotated[
85
+ list[package_request.PackageRequest], Field(description='Array of package configurations')
86
+ ]
87
+ po_number: Annotated[str | None, Field(description='Purchase order number for tracking')] = None
88
+ reporting_webhook: ReportingWebhook | None = None
89
+ start_time: Annotated[
90
+ str | AwareDatetime,
91
+ Field(
92
+ description="Campaign start timing: 'asap' or ISO 8601 date-time", title='Start Timing'
93
+ ),
94
+ ]