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,169 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: creative/preview_creative_response.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated, Any, Literal
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, AwareDatetime, ConfigDict, Field, RootModel
11
+
12
+ from ..core import context as context_1
13
+ from ..core import ext as ext_1
14
+ from . import preview_render
15
+
16
+
17
+ class Input(AdCPBaseModel):
18
+ context_description: Annotated[
19
+ str | None, Field(description='Context description applied to this variant')
20
+ ] = None
21
+ macros: Annotated[
22
+ dict[str, str] | None, Field(description='Macro values applied to this variant')
23
+ ] = None
24
+ name: Annotated[str, Field(description='Human-readable name for this variant')]
25
+
26
+
27
+ class Error(AdCPBaseModel):
28
+ code: Annotated[
29
+ str,
30
+ Field(
31
+ description="Error code (e.g., 'invalid_manifest', 'unsupported_format', 'missing_assets')"
32
+ ),
33
+ ]
34
+ details: Annotated[dict[str, Any] | None, Field(description='Additional error context')] = None
35
+ message: Annotated[str, Field(description='Human-readable error message')]
36
+
37
+
38
+ class Input4(AdCPBaseModel):
39
+ context_description: str | None = None
40
+ macros: dict[str, str] | None = None
41
+ name: str
42
+
43
+
44
+ class Preview(AdCPBaseModel):
45
+ input: Annotated[
46
+ Input,
47
+ Field(
48
+ description='The input parameters that generated this preview variant. Echoes back the request input or shows defaults used.'
49
+ ),
50
+ ]
51
+ preview_id: Annotated[str, Field(description='Unique identifier for this preview variant')]
52
+ renders: Annotated[
53
+ list[
54
+ preview_render.PreviewRender1
55
+ | preview_render.PreviewRender2
56
+ | preview_render.PreviewRender3
57
+ ],
58
+ Field(
59
+ description='Array of rendered pieces for this preview variant. Most formats render as a single piece. Companion ad formats (video + banner), multi-placement formats, and adaptive formats render as multiple pieces.',
60
+ min_length=1,
61
+ ),
62
+ ]
63
+
64
+
65
+ class PreviewCreativeResponse1(AdCPBaseModel):
66
+ model_config = ConfigDict(
67
+ extra='forbid',
68
+ )
69
+ context: context_1.ContextObject | None = None
70
+ expires_at: Annotated[
71
+ AwareDatetime, Field(description='ISO 8601 timestamp when preview links expire')
72
+ ]
73
+ ext: ext_1.ExtensionObject | None = None
74
+ interactive_url: Annotated[
75
+ AnyUrl | None,
76
+ Field(
77
+ description='Optional URL to an interactive testing page that shows all preview variants with controls to switch between them, modify macro values, and test different scenarios.'
78
+ ),
79
+ ] = None
80
+ previews: Annotated[
81
+ list[Preview],
82
+ Field(
83
+ description='Array of preview variants. Each preview corresponds to an input set from the request. If no inputs were provided, returns a single default preview.',
84
+ min_length=1,
85
+ ),
86
+ ]
87
+ response_type: Annotated[
88
+ Literal['single'],
89
+ Field(description='Discriminator indicating this is a single preview response'),
90
+ ]
91
+
92
+
93
+ class Preview1(AdCPBaseModel):
94
+ input: Input4
95
+ preview_id: str
96
+ renders: Annotated[
97
+ list[
98
+ preview_render.PreviewRender1
99
+ | preview_render.PreviewRender2
100
+ | preview_render.PreviewRender3
101
+ ],
102
+ Field(min_length=1),
103
+ ]
104
+
105
+
106
+ class Response(AdCPBaseModel):
107
+ expires_at: AwareDatetime
108
+ interactive_url: AnyUrl | None = None
109
+ previews: Annotated[
110
+ list[Preview1],
111
+ Field(description='Array of preview variants for this creative', min_length=1),
112
+ ]
113
+
114
+
115
+ class Results(AdCPBaseModel):
116
+ error: Annotated[Error | None, Field(description='Error information for failed requests')] = (
117
+ None
118
+ )
119
+ response: Annotated[Response, Field(description='Preview response for successful requests')]
120
+ success: Annotated[Literal[True], Field(description='Whether this preview request succeeded')]
121
+
122
+
123
+ Preview2 = Preview1
124
+
125
+
126
+ class Response1(AdCPBaseModel):
127
+ expires_at: AwareDatetime
128
+ interactive_url: AnyUrl | None = None
129
+ previews: Annotated[
130
+ list[Preview2],
131
+ Field(description='Array of preview variants for this creative', min_length=1),
132
+ ]
133
+
134
+
135
+ class Results1(AdCPBaseModel):
136
+ error: Annotated[Error, Field(description='Error information for failed requests')]
137
+ response: Annotated[
138
+ Response1 | None, Field(description='Preview response for successful requests')
139
+ ] = None
140
+ success: Annotated[Literal[False], Field(description='Whether this preview request succeeded')]
141
+
142
+
143
+ class PreviewCreativeResponse2(AdCPBaseModel):
144
+ model_config = ConfigDict(
145
+ extra='forbid',
146
+ )
147
+ context: context_1.ContextObject | None = None
148
+ ext: ext_1.ExtensionObject | None = None
149
+ response_type: Annotated[
150
+ Literal['batch'],
151
+ Field(description='Discriminator indicating this is a batch preview response'),
152
+ ]
153
+ results: Annotated[
154
+ list[Results | Results1],
155
+ Field(
156
+ description='Array of preview results corresponding to each request in the same order. results[0] is the result for requests[0], results[1] for requests[1], etc. Order is guaranteed even when some requests fail. Each result contains either a successful preview response or an error.',
157
+ min_length=1,
158
+ ),
159
+ ]
160
+
161
+
162
+ class PreviewCreativeResponse(RootModel[PreviewCreativeResponse1 | PreviewCreativeResponse2]):
163
+ root: Annotated[
164
+ PreviewCreativeResponse1 | PreviewCreativeResponse2,
165
+ Field(
166
+ description='Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests.',
167
+ title='Preview Creative Response',
168
+ ),
169
+ ]
@@ -0,0 +1,152 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: creative/preview_render.json
3
+ # timestamp: 2025-11-22T15:29:34+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated, Literal
8
+
9
+ from adcp.types.base import AdCPBaseModel
10
+ from pydantic import AnyUrl, ConfigDict, Field, RootModel
11
+
12
+
13
+ class Dimensions(AdCPBaseModel):
14
+ height: Annotated[float, Field(ge=0.0)]
15
+ width: Annotated[float, Field(ge=0.0)]
16
+
17
+
18
+ class Embedding(AdCPBaseModel):
19
+ csp_policy: Annotated[
20
+ str | None, Field(description='Content Security Policy requirements for embedding')
21
+ ] = None
22
+ recommended_sandbox: Annotated[
23
+ str | None,
24
+ Field(
25
+ description="Recommended iframe sandbox attribute value (e.g., 'allow-scripts allow-same-origin')"
26
+ ),
27
+ ] = None
28
+ requires_https: Annotated[
29
+ bool | None, Field(description='Whether this output requires HTTPS for secure embedding')
30
+ ] = None
31
+ supports_fullscreen: Annotated[
32
+ bool | None, Field(description='Whether this output supports fullscreen mode')
33
+ ] = None
34
+
35
+
36
+ class PreviewRender1(AdCPBaseModel):
37
+ model_config = ConfigDict(
38
+ extra='forbid',
39
+ )
40
+ dimensions: Annotated[
41
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
42
+ ] = None
43
+ embedding: Annotated[
44
+ Embedding | None,
45
+ Field(description='Optional security and embedding metadata for safe iframe integration'),
46
+ ] = None
47
+ output_format: Annotated[
48
+ Literal['url'], Field(description='Discriminator indicating preview_url is provided')
49
+ ]
50
+ preview_url: Annotated[
51
+ AnyUrl,
52
+ Field(
53
+ description='URL to an HTML page that renders this piece. Can be embedded in an iframe.'
54
+ ),
55
+ ]
56
+ render_id: Annotated[
57
+ str, Field(description='Unique identifier for this rendered piece within the variant')
58
+ ]
59
+ role: Annotated[
60
+ str,
61
+ Field(
62
+ description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles."
63
+ ),
64
+ ]
65
+
66
+
67
+ class PreviewRender2(AdCPBaseModel):
68
+ model_config = ConfigDict(
69
+ extra='forbid',
70
+ )
71
+ dimensions: Annotated[
72
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
73
+ ] = None
74
+ embedding: Annotated[
75
+ Embedding | None, Field(description='Optional security and embedding metadata')
76
+ ] = None
77
+ output_format: Annotated[
78
+ Literal['html'], Field(description='Discriminator indicating preview_html is provided')
79
+ ]
80
+ preview_html: Annotated[
81
+ str,
82
+ Field(
83
+ description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.'
84
+ ),
85
+ ]
86
+ render_id: Annotated[
87
+ str, Field(description='Unique identifier for this rendered piece within the variant')
88
+ ]
89
+ role: Annotated[
90
+ str,
91
+ Field(
92
+ description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles."
93
+ ),
94
+ ]
95
+
96
+
97
+ class PreviewRender3(AdCPBaseModel):
98
+ model_config = ConfigDict(
99
+ extra='forbid',
100
+ )
101
+ dimensions: Annotated[
102
+ Dimensions | None, Field(description='Dimensions for this rendered piece')
103
+ ] = None
104
+ embedding: Annotated[
105
+ Embedding | None,
106
+ Field(description='Optional security and embedding metadata for safe iframe integration'),
107
+ ] = None
108
+ output_format: Annotated[
109
+ Literal['both'],
110
+ Field(
111
+ description='Discriminator indicating both preview_url and preview_html are provided'
112
+ ),
113
+ ]
114
+ preview_html: Annotated[
115
+ str,
116
+ Field(
117
+ description='Raw HTML for this rendered piece. Can be embedded directly in the page without iframe. Security warning: Only use with trusted creative agents as this bypasses iframe sandboxing.'
118
+ ),
119
+ ]
120
+ preview_url: Annotated[
121
+ AnyUrl,
122
+ Field(
123
+ description='URL to an HTML page that renders this piece. Can be embedded in an iframe.'
124
+ ),
125
+ ]
126
+ render_id: Annotated[
127
+ str, Field(description='Unique identifier for this rendered piece within the variant')
128
+ ]
129
+ role: Annotated[
130
+ str,
131
+ Field(
132
+ description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles."
133
+ ),
134
+ ]
135
+
136
+
137
+ class PreviewRender(
138
+ RootModel[
139
+ PreviewRender1
140
+ | PreviewRender2
141
+ | PreviewRender3
142
+ ]
143
+ ):
144
+ root: Annotated[
145
+ PreviewRender1
146
+ | PreviewRender2
147
+ | PreviewRender3,
148
+ Field(
149
+ description='A single rendered piece of a creative preview with discriminated output format',
150
+ title='Preview Render',
151
+ ),
152
+ ]
@@ -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,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/adcp_domain.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 AdcpDomain(Enum):
11
+ media_buy = 'media-buy'
12
+ signals = 'signals'
@@ -0,0 +1,23 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/asset_content_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 AssetContentType(Enum):
11
+ image = 'image'
12
+ video = 'video'
13
+ audio = 'audio'
14
+ text = 'text'
15
+ markdown = 'markdown'
16
+ html = 'html'
17
+ css = 'css'
18
+ javascript = 'javascript'
19
+ vast = 'vast'
20
+ daast = 'daast'
21
+ promoted_offerings = 'promoted_offerings'
22
+ url = 'url'
23
+ webhook = 'webhook'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/auth_scheme.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 AuthenticationScheme(Enum):
11
+ Bearer = 'Bearer'
12
+ HMAC_SHA256 = 'HMAC-SHA256'
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/available_metric.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 AvailableMetric(Enum):
11
+ impressions = 'impressions'
12
+ spend = 'spend'
13
+ clicks = 'clicks'
14
+ ctr = 'ctr'
15
+ video_completions = 'video_completions'
16
+ completion_rate = 'completion_rate'
17
+ conversions = 'conversions'
18
+ viewability = 'viewability'
19
+ engagement_rate = 'engagement_rate'
@@ -0,0 +1,19 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/channels.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 AdvertisingChannels(Enum):
11
+ display = 'display'
12
+ video = 'video'
13
+ audio = 'audio'
14
+ native = 'native'
15
+ dooh = 'dooh'
16
+ ctv = 'ctv'
17
+ podcast = 'podcast'
18
+ retail = 'retail'
19
+ social = 'social'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/co_branding_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 CoBrandingRequirement(Enum):
11
+ required = 'required'
12
+ optional = 'optional'
13
+ none = 'none'
@@ -0,0 +1,15 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/creative_action.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 CreativeAction(Enum):
11
+ created = 'created'
12
+ updated = 'updated'
13
+ unchanged = 'unchanged'
14
+ failed = 'failed'
15
+ deleted = 'deleted'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/creative_agent_capability.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 CreativeAgentCapability(Enum):
11
+ validation = 'validation'
12
+ assembly = 'assembly'
13
+ generation = 'generation'
14
+ preview = 'preview'
@@ -0,0 +1,16 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/creative_sort_field.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 CreativeSortField(Enum):
11
+ created_date = 'created_date'
12
+ updated_date = 'updated_date'
13
+ name = 'name'
14
+ status = 'status'
15
+ assignment_count = 'assignment_count'
16
+ performance_score = 'performance_score'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/creative_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 CreativeStatus(Enum):
11
+ processing = 'processing'
12
+ approved = 'approved'
13
+ rejected = 'rejected'
14
+ pending_review = 'pending_review'
@@ -0,0 +1,21 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/daast_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 DaastTrackingEvent(Enum):
11
+ start = 'start'
12
+ firstQuartile = 'firstQuartile'
13
+ midpoint = 'midpoint'
14
+ thirdQuartile = 'thirdQuartile'
15
+ complete = 'complete'
16
+ impression = 'impression'
17
+ pause = 'pause'
18
+ resume = 'resume'
19
+ skip = 'skip'
20
+ mute = 'mute'
21
+ unmute = 'unmute'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/daast_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 DaastVersion(Enum):
11
+ field_1_0 = '1.0'
12
+ field_1_1 = '1.1'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/delivery_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 DeliveryType(Enum):
11
+ guaranteed = 'guaranteed'
12
+ non_guaranteed = 'non_guaranteed'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/dimension_unit.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 DimensionUnit(Enum):
11
+ px = 'px'
12
+ dp = 'dp'
13
+ inches = 'inches'
14
+ cm = 'cm'
@@ -0,0 +1,13 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/feed_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 FeedFormat(Enum):
11
+ google_merchant_center = 'google_merchant_center'
12
+ facebook_catalog = 'facebook_catalog'
13
+ custom = 'custom'
@@ -0,0 +1,14 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/feedback_source.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 FeedbackSource(Enum):
11
+ buyer_attribution = 'buyer_attribution'
12
+ third_party_measurement = 'third_party_measurement'
13
+ platform_analytics = 'platform_analytics'
14
+ verification_partner = 'verification_partner'
@@ -0,0 +1,17 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/format_category.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 FormatCategory(Enum):
11
+ audio = 'audio'
12
+ video = 'video'
13
+ display = 'display'
14
+ native = 'native'
15
+ dooh = 'dooh'
16
+ rich_media = 'rich_media'
17
+ universal = 'universal'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/format_id_parameter.json
3
+ # timestamp: 2025-11-22T19:16:02+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from enum import Enum
8
+
9
+
10
+ class FormatIdParameter(Enum):
11
+ dimensions = 'dimensions'
12
+ duration = 'duration'
@@ -0,0 +1,16 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/frequency_cap_scope.json
3
+ # timestamp: 2025-11-22T15:23:24+00:00
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Annotated, Literal
8
+
9
+ from pydantic import Field, RootModel
10
+
11
+
12
+ class FrequencyCapScope(RootModel[Literal['package']]):
13
+ root: Annotated[
14
+ Literal['package'],
15
+ Field(description='Scope for frequency cap application', title='Frequency Cap Scope'),
16
+ ]
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/history_entry_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 HistoryEntryType(Enum):
11
+ request = 'request'
12
+ response = 'response'
@@ -0,0 +1,12 @@
1
+ # generated by datamodel-codegen:
2
+ # filename: enums/http_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 HttpMethod(Enum):
11
+ GET = 'GET'
12
+ POST = 'POST'