adcp 1.6.1__py3-none-any.whl → 2.1.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 (118) hide show
  1. adcp/__init__.py +110 -189
  2. adcp/adagents.py +11 -12
  3. adcp/client.py +16 -11
  4. adcp/py.typed +0 -0
  5. adcp/types/aliases.py +209 -0
  6. adcp/types/generated.py +540 -1134
  7. adcp/types/generated_poc/__init__.py +3 -0
  8. adcp/types/generated_poc/activate_signal_request.py +34 -0
  9. adcp/types/generated_poc/activate_signal_response.py +57 -0
  10. adcp/types/generated_poc/activation_key.py +30 -0
  11. adcp/types/generated_poc/adagents.py +266 -0
  12. adcp/types/generated_poc/asset_type.py +100 -0
  13. adcp/types/generated_poc/audio_asset.py +26 -0
  14. adcp/types/generated_poc/brand_manifest.py +260 -0
  15. adcp/types/generated_poc/brand_manifest_ref.py +361 -0
  16. adcp/types/generated_poc/build_creative_request.py +43 -0
  17. adcp/types/generated_poc/build_creative_response.py +57 -0
  18. adcp/types/generated_poc/channels.py +19 -0
  19. adcp/types/generated_poc/cpc_option.py +39 -0
  20. adcp/types/generated_poc/cpcv_option.py +41 -0
  21. adcp/types/generated_poc/cpm_auction_option.py +54 -0
  22. adcp/types/generated_poc/cpm_fixed_option.py +39 -0
  23. adcp/types/generated_poc/cpp_option.py +60 -0
  24. adcp/types/generated_poc/cpv_option.py +73 -0
  25. adcp/types/generated_poc/create_media_buy_request.py +96 -0
  26. adcp/types/generated_poc/create_media_buy_response.py +66 -0
  27. adcp/types/generated_poc/creative_asset.py +83 -0
  28. adcp/types/generated_poc/creative_assignment.py +27 -0
  29. adcp/types/generated_poc/creative_manifest.py +61 -0
  30. adcp/types/generated_poc/creative_policy.py +34 -0
  31. adcp/types/generated_poc/creative_status.py +14 -0
  32. adcp/types/generated_poc/css_asset.py +20 -0
  33. adcp/types/generated_poc/daast_asset.py +76 -0
  34. adcp/types/generated_poc/delivery_metrics.py +111 -0
  35. adcp/types/generated_poc/delivery_type.py +12 -0
  36. adcp/types/generated_poc/deployment.py +78 -0
  37. adcp/types/generated_poc/destination.py +43 -0
  38. adcp/types/generated_poc/error.py +29 -0
  39. adcp/types/generated_poc/flat_rate_option.py +93 -0
  40. adcp/types/generated_poc/format.py +260 -0
  41. adcp/types/generated_poc/format_id.py +29 -0
  42. adcp/types/generated_poc/frequency_cap.py +19 -0
  43. adcp/types/generated_poc/frequency_cap_scope.py +16 -0
  44. adcp/types/generated_poc/get_media_buy_delivery_request.py +65 -0
  45. adcp/types/generated_poc/get_media_buy_delivery_response.py +220 -0
  46. adcp/types/generated_poc/get_products_request.py +83 -0
  47. adcp/types/generated_poc/get_products_response.py +29 -0
  48. adcp/types/generated_poc/get_signals_request.py +77 -0
  49. adcp/types/generated_poc/get_signals_response.py +65 -0
  50. adcp/types/generated_poc/html_asset.py +18 -0
  51. adcp/types/generated_poc/identifier_types.py +29 -0
  52. adcp/types/generated_poc/image_asset.py +23 -0
  53. adcp/types/generated_poc/index.py +17 -0
  54. adcp/types/generated_poc/javascript_asset.py +25 -0
  55. adcp/types/generated_poc/list_authorized_properties_request.py +39 -0
  56. adcp/types/generated_poc/list_authorized_properties_response.py +85 -0
  57. adcp/types/generated_poc/list_creative_formats_request.py +93 -0
  58. adcp/types/generated_poc/list_creative_formats_response.py +63 -0
  59. adcp/types/generated_poc/list_creatives_request.py +154 -0
  60. adcp/types/generated_poc/list_creatives_response.py +234 -0
  61. adcp/types/generated_poc/markdown_asset.py +43 -0
  62. adcp/types/generated_poc/measurement.py +40 -0
  63. adcp/types/generated_poc/media_buy.py +37 -0
  64. adcp/types/generated_poc/media_buy_status.py +14 -0
  65. adcp/types/generated_poc/pacing.py +13 -0
  66. adcp/types/generated_poc/package.py +61 -0
  67. adcp/types/generated_poc/package_request.py +61 -0
  68. adcp/types/generated_poc/package_status.py +14 -0
  69. adcp/types/generated_poc/performance_feedback.py +89 -0
  70. adcp/types/generated_poc/placement.py +37 -0
  71. adcp/types/generated_poc/preview_creative_request.py +163 -0
  72. adcp/types/generated_poc/preview_creative_response.py +175 -0
  73. adcp/types/generated_poc/preview_render.py +144 -0
  74. adcp/types/generated_poc/pricing_model.py +17 -0
  75. adcp/types/generated_poc/pricing_option.py +365 -0
  76. adcp/types/generated_poc/product.py +211 -0
  77. adcp/types/generated_poc/promoted_offerings.py +102 -0
  78. adcp/types/generated_poc/promoted_products.py +38 -0
  79. adcp/types/generated_poc/property.py +79 -0
  80. adcp/types/generated_poc/protocol_envelope.py +61 -0
  81. adcp/types/generated_poc/provide_performance_feedback_request.py +85 -0
  82. adcp/types/generated_poc/provide_performance_feedback_response.py +59 -0
  83. adcp/types/generated_poc/publisher_identifier_types.py +15 -0
  84. adcp/types/generated_poc/push_notification_config.py +55 -0
  85. adcp/types/generated_poc/reporting_capabilities.py +68 -0
  86. adcp/types/generated_poc/response.py +24 -0
  87. adcp/types/generated_poc/standard_format_ids.py +45 -0
  88. adcp/types/generated_poc/start_timing.py +13 -0
  89. adcp/types/generated_poc/sub_asset.py +55 -0
  90. adcp/types/generated_poc/sync_creatives_request.py +69 -0
  91. adcp/types/generated_poc/sync_creatives_response.py +117 -0
  92. adcp/types/generated_poc/targeting.py +53 -0
  93. adcp/types/generated_poc/task_status.py +19 -0
  94. adcp/types/generated_poc/task_type.py +15 -0
  95. adcp/types/generated_poc/tasks_get_request.py +29 -0
  96. adcp/types/generated_poc/tasks_get_response.py +112 -0
  97. adcp/types/generated_poc/tasks_list_request.py +121 -0
  98. adcp/types/generated_poc/tasks_list_response.py +122 -0
  99. adcp/types/generated_poc/text_asset.py +20 -0
  100. adcp/types/generated_poc/update_media_buy_request.py +160 -0
  101. adcp/types/generated_poc/update_media_buy_response.py +67 -0
  102. adcp/types/generated_poc/url_asset.py +33 -0
  103. adcp/types/generated_poc/vast_asset.py +86 -0
  104. adcp/types/generated_poc/vcpm_auction_option.py +57 -0
  105. adcp/types/generated_poc/vcpm_fixed_option.py +43 -0
  106. adcp/types/generated_poc/video_asset.py +28 -0
  107. adcp/types/generated_poc/webhook_asset.py +65 -0
  108. adcp/types/generated_poc/webhook_payload.py +102 -0
  109. adcp/utils/preview_cache.py +54 -41
  110. adcp/validation.py +172 -0
  111. {adcp-1.6.1.dist-info → adcp-2.1.0.dist-info}/METADATA +42 -3
  112. adcp-2.1.0.dist-info/RECORD +132 -0
  113. adcp/types/tasks.py +0 -511
  114. adcp-1.6.1.dist-info/RECORD +0 -28
  115. {adcp-1.6.1.dist-info → adcp-2.1.0.dist-info}/WHEEL +0 -0
  116. {adcp-1.6.1.dist-info → adcp-2.1.0.dist-info}/entry_points.txt +0 -0
  117. {adcp-1.6.1.dist-info → adcp-2.1.0.dist-info}/licenses/LICENSE +0 -0
  118. {adcp-1.6.1.dist-info → adcp-2.1.0.dist-info}/top_level.txt +0 -0
adcp/types/generated.py CHANGED
@@ -1,1208 +1,614 @@
1
- """
2
- Auto-generated Pydantic models from AdCP JSON schemas.
1
+ """Generated AdCP types.
2
+
3
+ Auto-generated by datamodel-code-generator from JSON schemas.
4
+ DO NOT EDIT MANUALLY.
3
5
 
4
- DO NOT EDIT THIS FILE MANUALLY.
5
- Generated from: https://adcontextprotocol.org/schemas/v1/
6
- To regenerate:
7
- python scripts/sync_schemas.py
8
- python scripts/fix_schema_refs.py
9
- python scripts/generate_models_simple.py
6
+ Generated from: https://github.com/adcontextprotocol/adcp/tree/main/schemas
7
+ Generation date: 2025-11-15 21:15:14 UTC
10
8
  """
11
9
 
12
10
  from __future__ import annotations
13
11
 
14
- import re
15
- from typing import Any, Literal
16
-
17
- from pydantic import ConfigDict, Field, field_validator
18
-
19
- from adcp.types.base import AdCPBaseModel as BaseModel
20
-
21
-
22
-
23
- # ============================================================================
24
- # CORE DOMAIN TYPES
25
- # ============================================================================
26
-
27
- class Product(BaseModel):
28
- """Represents available advertising inventory"""
29
-
30
- product_id: str = Field(description="Unique identifier for the product")
31
- name: str = Field(description="Human-readable product name")
32
- description: str = Field(description="Detailed description of the product and its inventory")
33
- publisher_properties: list[dict[str, Any]] = Field(description="Publisher properties covered by this product. Buyers fetch actual property definitions from each publisher's adagents.json and validate agent authorization.")
34
- format_ids: list[FormatId] = Field(description="Array of supported creative format IDs - structured format_id objects with agent_url and id")
35
- placements: list[Placement] | None = Field(None, description="Optional array of specific placements within this product. When provided, buyers can target specific placements when assigning creatives.")
36
- delivery_type: DeliveryType
37
- pricing_options: list[PricingOption] = Field(description="Available pricing models for this product")
38
- estimated_exposures: int | None = Field(None, description="Estimated exposures/impressions for guaranteed products")
39
- measurement: Measurement | None = None
40
- delivery_measurement: dict[str, Any] = Field(description="Measurement provider and methodology for delivery metrics. The buyer accepts the declared provider as the source of truth for the buy. REQUIRED for all products.")
41
- reporting_capabilities: ReportingCapabilities | None = None
42
- creative_policy: CreativePolicy | None = None
43
- is_custom: bool | None = Field(None, description="Whether this is a custom product")
44
- brief_relevance: str | None = Field(None, description="Explanation of why this product matches the brief (only included when brief is provided)")
45
- expires_at: str | None = Field(None, description="Expiration timestamp for custom products")
46
- product_card: dict[str, Any] | None = Field(None, description="Optional standard visual card (300x400px) for displaying this product in user interfaces. Can be rendered via preview_creative or pre-generated.")
47
- product_card_detailed: dict[str, Any] | None = Field(None, description="Optional detailed card with carousel and full specifications. Provides rich product presentation similar to media kit pages.")
48
-
49
-
50
- class MediaBuy(BaseModel):
51
- """Represents a purchased advertising campaign"""
52
-
53
- media_buy_id: str = Field(description="Publisher's unique identifier for the media buy")
54
- buyer_ref: str | None = Field(None, description="Buyer's reference identifier for this media buy")
55
- status: MediaBuyStatus
56
- promoted_offering: str = Field(description="Description of advertiser and what is being promoted")
57
- total_budget: float = Field(description="Total budget amount")
58
- packages: list[Package] = Field(description="Array of packages within this media buy")
59
- creative_deadline: str | None = Field(None, description="ISO 8601 timestamp for creative upload deadline")
60
- created_at: str | None = Field(None, description="Creation timestamp")
61
- updated_at: str | None = Field(None, description="Last update timestamp")
62
-
63
-
64
- class Package(BaseModel):
65
- """A specific product within a media buy (line item)"""
66
-
67
- package_id: str = Field(description="Publisher's unique identifier for the package")
68
- buyer_ref: str | None = Field(None, description="Buyer's reference identifier for this package")
69
- product_id: str | None = Field(None, description="ID of the product this package is based on")
70
- budget: float | None = Field(None, description="Budget allocation for this package in the currency specified by the pricing option")
71
- pacing: Pacing | None = None
72
- pricing_option_id: str | None = Field(None, description="ID of the selected pricing option from the product's pricing_options array")
73
- bid_price: float | None = Field(None, description="Bid price for auction-based CPM pricing (present if using cpm-auction-option)")
74
- impressions: float | None = Field(None, description="Impression goal for this package")
75
- targeting_overlay: Targeting | None = None
76
- creative_assignments: list[CreativeAssignment] | None = Field(None, description="Creative assets assigned to this package")
77
- format_ids_to_provide: list[FormatId] | None = Field(None, description="Format IDs that creative assets will be provided for this package")
78
- status: PackageStatus
79
-
80
-
81
- class CreativeAsset(BaseModel):
82
- """Creative asset for upload to library - supports static assets, generative formats, and third-party snippets"""
83
-
84
- creative_id: str = Field(description="Unique identifier for the creative")
85
- name: str = Field(description="Human-readable creative name")
86
- format_id: FormatId = Field(description="Format identifier specifying which format this creative conforms to")
87
- assets: dict[str, Any] = Field(description="Assets required by the format, keyed by asset_role")
88
- inputs: list[dict[str, Any]] | None = Field(None, description="Preview contexts for generative formats - defines what scenarios to generate previews for")
89
- tags: list[str] | None = Field(None, description="User-defined tags for organization and searchability")
90
- approved: bool | None = Field(None, description="For generative creatives: set to true to approve and finalize, false to request regeneration with updated assets/message. Omit for non-generative creatives.")
91
-
92
-
93
- class CreativeManifest(BaseModel):
94
- """Complete specification of a creative with all assets needed for rendering in a specific format. Each asset is typed according to its asset_role from the format specification and contains the actual content/URL that fulfills the format requirements."""
95
-
96
- format_id: FormatId = Field(description="Format identifier this manifest is for")
97
- promoted_offering: str | None = Field(None, description="Product name or offering being advertised. Maps to promoted_offerings in create_media_buy request to associate creative with the product being promoted.")
98
- assets: dict[str, Any] = Field(description="Map of asset IDs to actual asset content. Each key MUST match an asset_id from the format's assets_required array (e.g., 'banner_image', 'clickthrough_url', 'video_file', 'vast_tag'). The asset_id is the technical identifier used to match assets to format requirements. IMPORTANT: Creative manifest validation MUST be performed in the context of the format specification. The format defines what type each asset_id should be, which eliminates any validation ambiguity.")
99
-
100
-
101
- class BrandManifest(BaseModel):
102
- """Standardized brand information manifest for creative generation and media buying. Enables low-friction creative workflows by providing brand context that can be easily cached and shared across requests."""
103
-
104
- url: str | None = Field(None, description="Primary brand URL for context and asset discovery. Creative agents can infer brand information from this URL.")
105
- name: str | None = Field(None, description="Brand or business name")
106
- logos: list[dict[str, Any]] | None = Field(None, description="Brand logo assets with semantic tags for different use cases")
107
- colors: dict[str, Any] | None = Field(None, description="Brand color palette")
108
- fonts: dict[str, Any] | None = Field(None, description="Brand typography guidelines")
109
- tone: str | None = Field(None, description="Brand voice and messaging tone (e.g., 'professional', 'casual', 'humorous', 'trustworthy', 'innovative')")
110
- tagline: str | None = Field(None, description="Brand tagline or slogan")
111
- assets: list[dict[str, Any]] | None = Field(None, description="Brand asset library with explicit assets and tags. Assets are referenced inline with URLs pointing to CDN-hosted files.")
112
- product_catalog: dict[str, Any] | None = Field(None, description="Product catalog information for e-commerce advertisers. Enables SKU-level creative generation and product selection.")
113
- disclaimers: list[dict[str, Any]] | None = Field(None, description="Legal disclaimers or required text that must appear in creatives")
114
- industry: str | None = Field(None, description="Industry or vertical (e.g., 'retail', 'automotive', 'finance', 'healthcare')")
115
- target_audience: str | None = Field(None, description="Primary target audience description")
116
- contact: dict[str, Any] | None = Field(None, description="Brand contact information")
117
- metadata: dict[str, Any] | None = Field(None, description="Additional brand metadata")
118
-
119
-
120
- # Brand manifest provided either as an inline object or a URL string pointing to a hosted manifest
121
-
122
- class BrandManifestRefVariant1(BaseModel):
123
- """Inline brand manifest object"""
124
-
125
- pass
126
-
127
-
128
- class BrandManifestRefVariant2(BaseModel):
129
- """URL to a hosted brand manifest JSON file. The manifest at this URL must conform to the brand-manifest.json schema."""
130
-
131
- pass
132
-
133
-
134
- # Union type for Brand Manifest Reference
135
- BrandManifestRef = BrandManifestRefVariant1 | BrandManifestRefVariant2
136
-
137
-
138
- class Format(BaseModel):
139
- """Represents a creative format with its requirements"""
140
-
141
- format_id: FormatId = Field(description="Structured format identifier with agent URL and format name")
142
- name: str = Field(description="Human-readable format name")
143
- description: str | None = Field(None, description="Plain text explanation of what this format does and what assets it requires")
144
- preview_image: str | None = Field(None, description="DEPRECATED: Use format_card instead. Optional preview image URL for format browsing/discovery UI. Should be 400x300px (4:3 aspect ratio) PNG or JPG. Used as thumbnail/card image in format browsers. This field is maintained for backward compatibility but format_card provides a more flexible, structured approach.")
145
- example_url: str | None = Field(None, description="Optional URL to showcase page with examples and interactive demos of this format")
146
- type: Literal["audio", "video", "display", "native", "dooh", "rich_media", "universal"] = Field(description="Media type of this format - determines rendering method and asset requirements")
147
- renders: list[dict[str, Any]] | None = Field(None, description="Specification of rendered pieces for this format. Most formats produce a single render. Companion ad formats (video + banner), adaptive formats, and multi-placement formats produce multiple renders. Each render specifies its role and dimensions.")
148
- assets_required: list[Any] | None = Field(None, description="Array of required assets or asset groups for this format. Each asset is identified by its asset_id, which must be used as the key in creative manifests. Can contain individual assets or repeatable asset sequences (e.g., carousel products, slideshow frames).")
149
- delivery: dict[str, Any] | None = Field(None, description="Delivery method specifications (e.g., hosted, VAST, third-party tags)")
150
- supported_macros: list[str] | None = Field(None, description="List of universal macros supported by this format (e.g., MEDIA_BUY_ID, CACHEBUSTER, DEVICE_ID). Used for validation and developer tooling.")
151
- output_format_ids: list[FormatId] | None = Field(None, description="For generative formats: array of format IDs that this format can generate. When a format accepts inputs like brand_manifest and message, this specifies what concrete output formats can be produced (e.g., a generative banner format might output standard image banner formats).")
152
- format_card: dict[str, Any] | None = Field(None, description="Optional standard visual card (300x400px) for displaying this format in user interfaces. Can be rendered via preview_creative or pre-generated.")
153
- format_card_detailed: dict[str, Any] | None = Field(None, description="Optional detailed card with carousel and full specifications. Provides rich format documentation similar to ad spec pages.")
154
-
155
-
156
- class Targeting(BaseModel):
157
- """Optional geographic refinements for media buys. Most targeting should be expressed in the brief and handled by the publisher. These fields are primarily for geographic restrictions (RCT testing, regulatory compliance)."""
158
-
159
- geo_country_any_of: list[str] | None = Field(None, description="Restrict delivery to specific countries (ISO codes). Use for regulatory compliance or RCT testing.")
160
- geo_region_any_of: list[str] | None = Field(None, description="Restrict delivery to specific regions/states. Use for regulatory compliance or RCT testing.")
161
- geo_metro_any_of: list[str] | None = Field(None, description="Restrict delivery to specific metro areas (DMA codes). Use for regulatory compliance or RCT testing.")
162
- geo_postal_code_any_of: list[str] | None = Field(None, description="Restrict delivery to specific postal/ZIP codes. Use for regulatory compliance or RCT testing.")
163
- axe_include_segment: str | None = Field(None, description="AXE segment ID to include for targeting")
164
- axe_exclude_segment: str | None = Field(None, description="AXE segment ID to exclude from targeting")
165
- frequency_cap: FrequencyCap | None = None
166
-
167
-
168
- class FrequencyCap(BaseModel):
169
- """Frequency capping settings for package-level application"""
170
-
171
- suppress_minutes: float = Field(description="Minutes to suppress after impression")
172
-
173
-
174
- class Measurement(BaseModel):
175
- """Measurement capabilities included with a product"""
176
-
177
- type: str = Field(description="Type of measurement")
178
- attribution: str = Field(description="Attribution methodology")
179
- window: str | None = Field(None, description="Attribution window")
180
- reporting: str = Field(description="Reporting frequency and format")
181
-
182
-
183
- class DeliveryMetrics(BaseModel):
184
- """Standard delivery metrics that can be reported at media buy, package, or creative level"""
185
-
186
- impressions: float | None = Field(None, description="Impressions delivered")
187
- spend: float | None = Field(None, description="Amount spent")
188
- clicks: float | None = Field(None, description="Total clicks")
189
- ctr: float | None = Field(None, description="Click-through rate (clicks/impressions)")
190
- views: float | None = Field(None, description="Views at threshold (for CPV)")
191
- completed_views: float | None = Field(None, description="100% completions (for CPCV)")
192
- completion_rate: float | None = Field(None, description="Completion rate (completed_views/impressions)")
193
- conversions: float | None = Field(None, description="Conversions (reserved for future CPA pricing support)")
194
- leads: float | None = Field(None, description="Leads generated (reserved for future CPL pricing support)")
195
- grps: float | None = Field(None, description="Gross Rating Points delivered (for CPP)")
196
- reach: float | None = Field(None, description="Unique reach - units depend on measurement provider (e.g., individuals, households, devices, cookies). See delivery_measurement.provider for methodology.")
197
- frequency: float | None = Field(None, description="Average frequency per individual (typically measured over campaign duration, but can vary by measurement provider)")
198
- quartile_data: dict[str, Any] | None = Field(None, description="Video quartile completion data")
199
- dooh_metrics: dict[str, Any] | None = Field(None, description="DOOH-specific metrics (only included for DOOH campaigns)")
200
-
201
-
202
- class Error(BaseModel):
203
- """Standard error structure for task-specific errors and warnings"""
204
-
205
- code: str = Field(description="Error code for programmatic handling")
206
- message: str = Field(description="Human-readable error message")
207
- field: str | None = Field(None, description="Field path associated with the error (e.g., 'packages[0].targeting')")
208
- suggestion: str | None = Field(None, description="Suggested fix for the error")
209
- retry_after: float | None = Field(None, description="Seconds to wait before retrying the operation")
210
- details: Any | None = Field(None, description="Additional task-specific error details")
211
-
212
-
213
- class Property(BaseModel):
214
- """An advertising property that can be validated via adagents.json"""
215
-
216
- property_id: str | None = Field(None, description="Unique identifier for this property (optional). Enables referencing properties by ID instead of repeating full objects. Recommended format: lowercase with underscores (e.g., 'cnn_ctv_app', 'instagram_mobile')")
217
- property_type: Literal["website", "mobile_app", "ctv_app", "dooh", "podcast", "radio", "streaming_audio"] = Field(description="Type of advertising property")
218
- name: str = Field(description="Human-readable property name")
219
- identifiers: list[dict[str, Any]] = Field(description="Array of identifiers for this property")
220
- tags: list[str] | None = Field(None, description="Tags for categorization and grouping (e.g., network membership, content categories)")
221
- publisher_domain: str | None = Field(None, description="Domain where adagents.json should be checked for authorization validation. Required for list_authorized_properties response. Optional in adagents.json (file location implies domain).")
222
-
223
-
224
- class Placement(BaseModel):
225
- """Represents a specific ad placement within a product's inventory"""
226
-
227
- placement_id: str = Field(description="Unique identifier for the placement within the product")
228
- name: str = Field(description="Human-readable name for the placement (e.g., 'Homepage Banner', 'Article Sidebar')")
229
- description: str | None = Field(None, description="Detailed description of where and how the placement appears")
230
- format_ids: list[FormatId] | None = Field(None, description="Format IDs supported by this specific placement (subset of product's formats)")
231
-
232
-
233
- class CreativePolicy(BaseModel):
234
- """Creative requirements and restrictions for a product"""
235
-
236
- co_branding: Literal["required", "optional", "none"] = Field(description="Co-branding requirement")
237
- landing_page: Literal["any", "retailer_site_only", "must_include_retailer"] = Field(description="Landing page requirements")
238
- templates_available: bool = Field(description="Whether creative templates are provided")
239
-
240
-
241
- class CreativeAssignment(BaseModel):
242
- """Assignment of a creative asset to a package with optional placement targeting. Used in create_media_buy and update_media_buy requests. Note: sync_creatives does not support placement_ids - use create/update_media_buy for placement-level targeting."""
243
-
244
- creative_id: str = Field(description="Unique identifier for the creative")
245
- weight: float | None = Field(None, description="Delivery weight for this creative")
246
- placement_ids: list[str] | None = Field(None, description="Optional array of placement IDs where this creative should run. When omitted, the creative runs on all placements in the package. References placement_id values from the product's placements array.")
247
-
248
-
249
- class PerformanceFeedback(BaseModel):
250
- """Represents performance feedback data for a media buy or package"""
251
-
252
- feedback_id: str = Field(description="Unique identifier for this performance feedback submission")
253
- media_buy_id: str = Field(description="Publisher's media buy identifier")
254
- package_id: str | None = Field(None, description="Specific package within the media buy (if feedback is package-specific)")
255
- creative_id: str | None = Field(None, description="Specific creative asset (if feedback is creative-specific)")
256
- measurement_period: dict[str, Any] = Field(description="Time period for performance measurement")
257
- performance_index: float = Field(description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)")
258
- metric_type: Literal["overall_performance", "conversion_rate", "brand_lift", "click_through_rate", "completion_rate", "viewability", "brand_safety", "cost_efficiency"] = Field(description="The business metric being measured")
259
- feedback_source: Literal["buyer_attribution", "third_party_measurement", "platform_analytics", "verification_partner"] = Field(description="Source of the performance data")
260
- status: Literal["accepted", "queued", "applied", "rejected"] = Field(description="Processing status of the performance feedback")
261
- submitted_at: str = Field(description="ISO 8601 timestamp when feedback was submitted")
262
- applied_at: str | None = Field(None, description="ISO 8601 timestamp when feedback was applied to optimization algorithms")
263
-
264
-
265
- # Campaign start timing: 'asap' or ISO 8601 date-time
266
-
267
- class StartTimingVariant1(BaseModel):
268
- """Start campaign as soon as possible"""
269
-
270
- pass
271
-
272
-
273
- class StartTimingVariant2(BaseModel):
274
- """Scheduled start date/time in ISO 8601 format"""
275
-
276
- pass
277
-
278
-
279
- # Union type for Start Timing
280
- StartTiming = StartTimingVariant1 | StartTimingVariant2
281
-
282
-
283
- # Sub-asset for multi-asset creative formats, including carousel images and native ad template variables
284
-
285
- class MediaSubAsset(BaseModel):
286
- model_config = ConfigDict(extra="forbid")
287
-
288
- asset_kind: Literal["media"] = Field(description="Discriminator indicating this is a media asset with content_uri")
289
- asset_type: str = Field(description="Type of asset. Common types: thumbnail_image, product_image, featured_image, logo")
290
- asset_id: str = Field(description="Unique identifier for the asset within the creative")
291
- content_uri: str = Field(description="URL for media assets (images, videos, etc.)")
292
-
293
-
294
- class TextSubAsset(BaseModel):
295
- model_config = ConfigDict(extra="forbid")
296
-
297
- asset_kind: Literal["text"] = Field(description="Discriminator indicating this is a text asset with content")
298
- asset_type: str = Field(description="Type of asset. Common types: headline, body_text, cta_text, price_text, sponsor_name, author_name, click_url")
299
- asset_id: str = Field(description="Unique identifier for the asset within the creative")
300
- content: Any = Field(description="Text content for text-based assets like headlines, body text, CTA text, etc.")
301
-
302
-
303
- # Union type for Sub-Asset
304
- SubAsset = MediaSubAsset | TextSubAsset
305
-
306
-
307
- class WebhookPayload(BaseModel):
308
- """Payload structure sent to webhook endpoints when async task status changes. Protocol-level fields are at the top level and the task-specific payload is nested under the 'result' field. This schema represents what your webhook handler will receive when a task transitions from 'submitted' to a terminal or intermediate state."""
309
-
310
- operation_id: str | None = Field(None, description="Publisher-defined operation identifier correlating a sequence of task updates across webhooks.")
311
- task_id: str = Field(description="Unique identifier for this task. Use this to correlate webhook notifications with the original task submission.")
312
- task_type: TaskType = Field(description="Type of AdCP operation that triggered this webhook. Enables webhook handlers to route to appropriate processing logic.")
313
- domain: Literal["media-buy", "signals"] | None = Field(None, description="AdCP domain this task belongs to. Helps classify the operation type at a high level.")
314
- status: TaskStatus = Field(description="Current task status. Webhooks are only triggered for status changes after initial submission (e.g., submitted → input-required, submitted → completed, submitted → failed).")
315
- timestamp: str = Field(description="ISO 8601 timestamp when this webhook was generated.")
316
- message: str | None = Field(None, description="Human-readable summary of the current task state. Provides context about what happened and what action may be needed.")
317
- context_id: str | None = Field(None, description="Session/conversation identifier. Use this to continue the conversation if input-required status needs clarification or additional parameters.")
318
- progress: dict[str, Any] | None = Field(None, description="Progress information for tasks still in 'working' state. Rarely seen in webhooks since 'working' tasks typically complete synchronously, but may appear if a task transitions from 'submitted' to 'working'.")
319
- result: Any | None = Field(None, description="Task-specific payload for this status update. Validated against the appropriate response schema based on task_type.")
320
- error: Any | None = Field(None, description="Error message for failed tasks. Only present when status is 'failed'.")
321
-
322
-
323
- class ProtocolEnvelope(BaseModel):
324
- """Standard envelope structure for AdCP task responses. This envelope is added by the protocol layer (MCP, A2A, REST) and wraps the task-specific response payload. Task response schemas should NOT include these fields - they are protocol-level concerns."""
325
-
326
- context_id: str | None = Field(None, description="Session/conversation identifier for tracking related operations across multiple task invocations. Managed by the protocol layer to maintain conversational context.")
327
- task_id: str | None = Field(None, description="Unique identifier for tracking asynchronous operations. Present when a task requires extended processing time. Used to query task status and retrieve results when complete.")
328
- status: TaskStatus = Field(description="Current task execution state. Indicates whether the task is completed, in progress (working), submitted for async processing, failed, or requires user input. Managed by the protocol layer.")
329
- message: str | None = Field(None, description="Human-readable summary of the task result. Provides natural language explanation of what happened, suitable for display to end users or for AI agent comprehension. Generated by the protocol layer based on the task response.")
330
- timestamp: str | None = Field(None, description="ISO 8601 timestamp when the response was generated. Useful for debugging, logging, cache validation, and tracking async operation progress.")
331
- push_notification_config: PushNotificationConfig | None = Field(None, description="Push notification configuration for async task updates (A2A and REST protocols). Echoed from the request to confirm webhook settings. Specifies URL, authentication scheme (Bearer or HMAC-SHA256), and credentials. MCP uses progress notifications instead of webhooks.")
332
- payload: dict[str, Any] = Field(description="The actual task-specific response data. This is the content defined in individual task response schemas (e.g., get-products-response.json, create-media-buy-response.json). Contains only domain-specific data without protocol-level fields.")
333
-
334
-
335
- class Response(BaseModel):
336
- """Protocol-level response wrapper (MCP/A2A) - contains AdCP task data plus protocol fields"""
337
-
338
- message: str = Field(description="Human-readable summary")
339
- context_id: str | None = Field(None, description="Session continuity identifier")
340
- data: Any | None = Field(None, description="AdCP task-specific response data (see individual task response schemas)")
341
-
342
-
343
- class PromotedProducts(BaseModel):
344
- """Specification of products or offerings being promoted in a campaign. Supports multiple selection methods from the brand manifest that can be combined using UNION (OR) logic. When multiple selection methods are provided, products matching ANY of the criteria are selected (logical OR, not AND)."""
345
-
346
- manifest_skus: list[str] | None = Field(None, description="Direct product SKU references from the brand manifest product catalog")
347
- manifest_tags: list[str] | None = Field(None, description="Select products by tags from the brand manifest product catalog (e.g., 'organic', 'sauces', 'holiday')")
348
- manifest_category: str | None = Field(None, description="Select products from a specific category in the brand manifest product catalog (e.g., 'beverages/soft-drinks', 'food/sauces')")
349
- manifest_query: str | None = Field(None, description="Natural language query to select products from the brand manifest (e.g., 'all Kraft Heinz pasta sauces', 'organic products under $20')")
350
-
351
-
352
- # A destination platform where signals can be activated (DSP, sales agent, etc.)
353
-
354
- class PlatformDestination(BaseModel):
355
- model_config = ConfigDict(extra="forbid")
356
-
357
- type: Literal["platform"] = Field(description="Discriminator indicating this is a platform-based destination")
358
- platform: str = Field(description="Platform identifier for DSPs (e.g., 'the-trade-desk', 'amazon-dsp')")
359
- account: str | None = Field(None, description="Optional account identifier on the platform")
360
-
361
-
362
- class AgentDestination(BaseModel):
363
- model_config = ConfigDict(extra="forbid")
364
-
365
- type: Literal["agent"] = Field(description="Discriminator indicating this is an agent URL-based destination")
366
- agent_url: str = Field(description="URL identifying the destination agent (for sales agents, etc.)")
367
- account: str | None = Field(None, description="Optional account identifier on the agent")
368
-
369
-
370
- # Union type for Destination
371
- Destination = PlatformDestination | AgentDestination
372
-
373
-
374
- # A signal deployment to a specific destination platform with activation status and key
375
-
376
- class PlatformDeployment(BaseModel):
377
- model_config = ConfigDict(extra="forbid")
378
-
379
- type: Literal["platform"] = Field(description="Discriminator indicating this is a platform-based deployment")
380
- platform: str = Field(description="Platform identifier for DSPs")
381
- account: str | None = Field(None, description="Account identifier if applicable")
382
- is_live: bool = Field(description="Whether signal is currently active on this destination")
383
- activation_key: ActivationKey | None = Field(None, description="The key to use for targeting. Only present if is_live=true AND requester has access to this destination.")
384
- estimated_activation_duration_minutes: float | None = Field(None, description="Estimated time to activate if not live, or to complete activation if in progress")
385
- deployed_at: str | None = Field(None, description="Timestamp when activation completed (if is_live=true)")
386
-
387
-
388
- class AgentDeployment(BaseModel):
389
- model_config = ConfigDict(extra="forbid")
390
-
391
- type: Literal["agent"] = Field(description="Discriminator indicating this is an agent URL-based deployment")
392
- agent_url: str = Field(description="URL identifying the destination agent")
393
- account: str | None = Field(None, description="Account identifier if applicable")
394
- is_live: bool = Field(description="Whether signal is currently active on this destination")
395
- activation_key: ActivationKey | None = Field(None, description="The key to use for targeting. Only present if is_live=true AND requester has access to this destination.")
396
- estimated_activation_duration_minutes: float | None = Field(None, description="Estimated time to activate if not live, or to complete activation if in progress")
397
- deployed_at: str | None = Field(None, description="Timestamp when activation completed (if is_live=true)")
398
-
399
-
400
- # Union type for Deployment
401
- Deployment = PlatformDeployment | AgentDeployment
402
-
403
-
404
- # Universal identifier for using a signal on a destination platform. Can be either a segment ID or a key-value pair depending on the platform's targeting mechanism.
405
-
406
- class Segment_idActivationKey(BaseModel):
407
- model_config = ConfigDict(extra="forbid")
408
-
409
- type: Literal["segment_id"] = Field(description="Segment ID based targeting")
410
- segment_id: str = Field(description="The platform-specific segment identifier to use in campaign targeting")
411
-
412
-
413
- class Key_valueActivationKey(BaseModel):
414
- model_config = ConfigDict(extra="forbid")
415
-
416
- type: Literal["key_value"] = Field(description="Key-value pair based targeting")
417
- key: str = Field(description="The targeting parameter key")
418
- value: str = Field(description="The targeting parameter value")
419
-
420
-
421
- # Union type for Activation Key
422
- ActivationKey = Segment_idActivationKey | Key_valueActivationKey
423
-
424
-
425
- class PushNotificationConfig(BaseModel):
426
- """Webhook configuration for asynchronous task notifications. Uses A2A-compatible PushNotificationConfig structure. Supports Bearer tokens (simple) or HMAC signatures (production-recommended)."""
427
-
428
- url: str = Field(description="Webhook endpoint URL for task status notifications")
429
- token: str | None = Field(None, description="Optional client-provided token for webhook validation. Echoed back in webhook payload to validate request authenticity.")
430
- authentication: dict[str, Any] = Field(description="Authentication configuration for webhook delivery (A2A-compatible)")
431
-
432
-
433
- class ReportingCapabilities(BaseModel):
434
- """Reporting capabilities available for a product"""
435
-
436
- available_reporting_frequencies: list[Literal["hourly", "daily", "monthly"]] = Field(description="Supported reporting frequency options")
437
- expected_delay_minutes: int = Field(description="Expected delay in minutes before reporting data becomes available (e.g., 240 for 4-hour delay)")
438
- timezone: str = Field(description="Timezone for reporting periods. Use 'UTC' or IANA timezone (e.g., 'America/New_York'). Critical for daily/monthly frequency alignment.")
439
- supports_webhooks: bool = Field(description="Whether this product supports webhook-based reporting notifications")
440
- available_metrics: list[Literal["impressions", "spend", "clicks", "ctr", "video_completions", "completion_rate", "conversions", "viewability", "engagement_rate"]] = Field(description="Metrics available in reporting. Impressions and spend are always implicitly included.")
441
-
442
-
443
- # Type alias for Advertising Channels
444
- # Standard advertising channels supported by AdCP
445
- Channels = Literal["display", "video", "audio", "native", "dooh", "ctv", "podcast", "retail", "social"]
446
-
447
-
448
- # Type alias for Delivery Type
449
- # Type of inventory delivery
450
- DeliveryType = Literal["guaranteed", "non_guaranteed"]
451
-
452
-
453
- # Type alias for Pacing
454
- # Budget pacing strategy
455
- Pacing = Literal["even", "asap", "front_loaded"]
456
-
457
-
458
- # Type alias for Package Status
459
- # Status of a package
460
- PackageStatus = Literal["draft", "active", "paused", "completed"]
461
-
462
-
463
- # Type alias for Media Buy Status
464
- # Status of a media buy
465
- MediaBuyStatus = Literal["pending_activation", "active", "paused", "completed"]
466
-
467
-
468
- # Type alias for Task Type
469
- # Valid AdCP task types across all domains. These represent the complete set of operations that can be tracked via the task management system.
470
- TaskType = Literal["create_media_buy", "update_media_buy", "sync_creatives", "activate_signal", "get_signals"]
471
-
472
-
473
- # Type alias for Task Status
474
- # Standardized task status values based on A2A TaskState enum. Indicates the current state of any AdCP operation.
475
- TaskStatus = Literal["submitted", "working", "input-required", "completed", "canceled", "failed", "rejected", "auth-required", "unknown"]
476
-
477
-
478
- # Type alias for Pricing Model
479
- # Supported pricing models for advertising products
480
- PricingModel = Literal["cpm", "vcpm", "cpc", "cpcv", "cpv", "cpp", "flat_rate"]
481
-
482
-
483
- # A pricing model option offered by a publisher for a product. Each pricing model has its own schema with model-specific requirements.
484
-
485
- class PricingOptionVariant1(BaseModel):
486
- pass
487
-
488
-
489
- class PricingOptionVariant2(BaseModel):
490
- pass
491
-
492
-
493
- class PricingOptionVariant3(BaseModel):
494
- pass
495
-
496
-
497
- class PricingOptionVariant4(BaseModel):
498
- pass
499
-
500
-
501
- class PricingOptionVariant5(BaseModel):
502
- pass
503
-
504
-
505
- class PricingOptionVariant6(BaseModel):
506
- pass
507
-
508
-
509
- class PricingOptionVariant7(BaseModel):
510
- pass
511
-
512
-
513
- class PricingOptionVariant8(BaseModel):
514
- pass
515
-
516
-
517
- class PricingOptionVariant9(BaseModel):
518
- pass
519
-
520
-
521
- # Union type for Pricing Option
522
- PricingOption = PricingOptionVariant1 | PricingOptionVariant2 | PricingOptionVariant3 | PricingOptionVariant4 | PricingOptionVariant5 | PricingOptionVariant6 | PricingOptionVariant7 | PricingOptionVariant8 | PricingOptionVariant9
523
-
524
-
525
- # Type alias for Standard Format IDs
526
- # Enumeration of all standard creative format identifiers in AdCP
527
- StandardFormatIds = Literal["display_300x250", "display_728x90", "display_320x50", "display_160x600", "display_970x250", "display_336x280", "display_expandable_300x250", "display_expandable_728x90", "display_interstitial_320x480", "display_interstitial_desktop", "display_dynamic_300x250", "display_responsive", "native_in_feed", "native_content_recommendation", "native_product", "video_skippable_15s", "video_skippable_30s", "video_non_skippable_15s", "video_non_skippable_30s", "video_outstream_autoplay", "video_vertical_story", "video_rewarded_30s", "video_pause_ad", "video_ctv_non_skippable_30s", "audio_standard_15s", "audio_standard_30s", "audio_podcast_host_read", "audio_programmatic", "universal_carousel", "universal_canvas", "universal_takeover", "universal_gallery", "universal_reveal", "dooh_landscape_static", "dooh_portrait_video"]
528
-
529
-
530
- # VAST (Video Ad Serving Template) tag for third-party video ad serving
531
-
532
- class UrlVastAsset(BaseModel):
533
- model_config = ConfigDict(extra="forbid")
534
-
535
- delivery_type: Literal["url"] = Field(description="Discriminator indicating VAST is delivered via URL endpoint")
536
- url: str = Field(description="URL endpoint that returns VAST XML")
537
- vast_version: Literal["2.0", "3.0", "4.0", "4.1", "4.2"] | None = Field(None, description="VAST specification version")
538
- vpaid_enabled: bool | None = Field(None, description="Whether VPAID (Video Player-Ad Interface Definition) is supported")
539
- duration_ms: int | None = Field(None, description="Expected video duration in milliseconds (if known)")
540
- tracking_events: list[Literal["start", "firstQuartile", "midpoint", "thirdQuartile", "complete", "impression", "click", "pause", "resume", "skip", "mute", "unmute", "fullscreen", "exitFullscreen", "playerExpand", "playerCollapse"]] | None = Field(None, description="Tracking events supported by this VAST tag")
541
-
542
-
543
- class InlineVastAsset(BaseModel):
544
- model_config = ConfigDict(extra="forbid")
545
-
546
- delivery_type: Literal["inline"] = Field(description="Discriminator indicating VAST is delivered as inline XML content")
547
- content: str = Field(description="Inline VAST XML content")
548
- vast_version: Literal["2.0", "3.0", "4.0", "4.1", "4.2"] | None = Field(None, description="VAST specification version")
549
- vpaid_enabled: bool | None = Field(None, description="Whether VPAID (Video Player-Ad Interface Definition) is supported")
550
- duration_ms: int | None = Field(None, description="Expected video duration in milliseconds (if known)")
551
- tracking_events: list[Literal["start", "firstQuartile", "midpoint", "thirdQuartile", "complete", "impression", "click", "pause", "resume", "skip", "mute", "unmute", "fullscreen", "exitFullscreen", "playerExpand", "playerCollapse"]] | None = Field(None, description="Tracking events supported by this VAST tag")
552
-
553
-
554
- # Union type for VAST Asset
555
- VastAsset = UrlVastAsset | InlineVastAsset
556
-
557
-
558
- # DAAST (Digital Audio Ad Serving Template) tag for third-party audio ad serving
559
-
560
- class UrlDaastAsset(BaseModel):
561
- model_config = ConfigDict(extra="forbid")
562
-
563
- delivery_type: Literal["url"] = Field(description="Discriminator indicating DAAST is delivered via URL endpoint")
564
- url: str = Field(description="URL endpoint that returns DAAST XML")
565
- daast_version: Literal["1.0", "1.1"] | None = Field(None, description="DAAST specification version")
566
- duration_ms: int | None = Field(None, description="Expected audio duration in milliseconds (if known)")
567
- tracking_events: list[Literal["start", "firstQuartile", "midpoint", "thirdQuartile", "complete", "impression", "pause", "resume", "skip", "mute", "unmute"]] | None = Field(None, description="Tracking events supported by this DAAST tag")
568
- companion_ads: bool | None = Field(None, description="Whether companion display ads are included")
569
-
570
-
571
- class InlineDaastAsset(BaseModel):
572
- model_config = ConfigDict(extra="forbid")
573
-
574
- delivery_type: Literal["inline"] = Field(description="Discriminator indicating DAAST is delivered as inline XML content")
575
- content: str = Field(description="Inline DAAST XML content")
576
- daast_version: Literal["1.0", "1.1"] | None = Field(None, description="DAAST specification version")
577
- duration_ms: int | None = Field(None, description="Expected audio duration in milliseconds (if known)")
578
- tracking_events: list[Literal["start", "firstQuartile", "midpoint", "thirdQuartile", "complete", "impression", "pause", "resume", "skip", "mute", "unmute"]] | None = Field(None, description="Tracking events supported by this DAAST tag")
579
- companion_ads: bool | None = Field(None, description="Whether companion display ads are included")
580
-
581
-
582
- # Union type for DAAST Asset
583
- DaastAsset = UrlDaastAsset | InlineDaastAsset
584
-
585
-
586
- # A single rendered piece of a creative preview with discriminated output format
587
-
588
- class UrlPreviewRender(BaseModel):
589
- """URL-only preview format"""
590
-
591
- model_config = ConfigDict(extra="forbid")
592
-
593
- render_id: str = Field(description="Unique identifier for this rendered piece within the variant")
594
- output_format: Literal["url"] = Field(description="Discriminator indicating preview_url is provided")
595
- preview_url: str = Field(description="URL to an HTML page that renders this piece. Can be embedded in an iframe.")
596
- role: str = Field(description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.")
597
- dimensions: dict[str, Any] | None = Field(None, description="Dimensions for this rendered piece")
598
- embedding: dict[str, Any] | None = Field(None, description="Optional security and embedding metadata for safe iframe integration")
599
-
600
-
601
- class HtmlPreviewRender(BaseModel):
602
- """HTML-only preview format"""
603
-
604
- model_config = ConfigDict(extra="forbid")
605
-
606
- render_id: str = Field(description="Unique identifier for this rendered piece within the variant")
607
- output_format: Literal["html"] = Field(description="Discriminator indicating preview_html is provided")
608
- preview_html: str = Field(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.")
609
- role: str = Field(description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.")
610
- dimensions: dict[str, Any] | None = Field(None, description="Dimensions for this rendered piece")
611
- embedding: dict[str, Any] | None = Field(None, description="Optional security and embedding metadata")
612
-
613
-
614
- class BothPreviewRender(BaseModel):
615
- """Both URL and HTML preview format"""
616
-
617
- model_config = ConfigDict(extra="forbid")
618
-
619
- render_id: str = Field(description="Unique identifier for this rendered piece within the variant")
620
- output_format: Literal["both"] = Field(description="Discriminator indicating both preview_url and preview_html are provided")
621
- preview_url: str = Field(description="URL to an HTML page that renders this piece. Can be embedded in an iframe.")
622
- preview_html: str = Field(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.")
623
- role: str = Field(description="Semantic role of this rendered piece. Use 'primary' for main content, 'companion' for associated banners, descriptive strings for device variants or custom roles.")
624
- dimensions: dict[str, Any] | None = Field(None, description="Dimensions for this rendered piece")
625
- embedding: dict[str, Any] | None = Field(None, description="Optional security and embedding metadata for safe iframe integration")
626
-
627
-
628
- # Union type for Preview Render
629
- PreviewRender = UrlPreviewRender | HtmlPreviewRender | BothPreviewRender
630
-
631
-
632
-
633
- # ============================================================================
634
- # TASK REQUEST/RESPONSE TYPES
635
- # ============================================================================
636
-
637
- class ActivateSignalRequest(BaseModel):
638
- """Request parameters for activating a signal on a specific destination"""
639
-
640
- signal_agent_segment_id: str = Field(description="The universal identifier for the signal to activate")
641
- destinations: list[Destination] = Field(description="Target destination(s) for activation. If the authenticated caller matches one of these destinations, activation keys will be included in the response.")
642
- context: dict[str, Any] | None = Field(None, 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.")
643
-
644
-
645
- class BuildCreativeRequest(BaseModel):
646
- """Request to transform or generate a creative manifest. Takes a source manifest (which may be minimal for pure generation) and produces a target manifest in the specified format. The source manifest should include all assets required by the target format (e.g., promoted_offerings for generative formats)."""
647
-
648
- message: str | None = Field(None, 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.")
649
- creative_manifest: CreativeManifest | None = Field(None, 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.")
650
- target_format_id: FormatId = Field(description="Format ID to generate. The format definition specifies required input assets and output structure.")
651
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
652
-
653
-
654
- class CreateMediaBuyRequest(BaseModel):
655
- """Request parameters for creating a media buy"""
656
-
657
- buyer_ref: str = Field(description="Buyer's reference identifier for this media buy")
658
- packages: list[PackageRequest] = Field(description="Array of package configurations")
659
- brand_manifest: BrandManifestRef = Field(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.")
660
- po_number: str | None = Field(None, description="Purchase order number for tracking")
661
- start_time: StartTiming
662
- end_time: str = Field(description="Campaign end date/time in ISO 8601 format")
663
- reporting_webhook: Any | None = None
664
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
665
-
666
-
667
- class GetMediaBuyDeliveryRequest(BaseModel):
668
- """Request parameters for retrieving comprehensive delivery metrics"""
669
-
670
- media_buy_ids: list[str] | None = Field(None, description="Array of publisher media buy IDs to get delivery data for")
671
- buyer_refs: list[str] | None = Field(None, description="Array of buyer reference IDs to get delivery data for")
672
- status_filter: Any | None = Field(None, description="Filter by status. Can be a single status or array of statuses")
673
- start_date: str | None = Field(None, description="Start date for reporting period (YYYY-MM-DD)")
674
- end_date: str | None = Field(None, description="End date for reporting period (YYYY-MM-DD)")
675
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
676
-
677
-
678
- class GetProductsRequest(BaseModel):
679
- """Request parameters for discovering available advertising products"""
680
-
681
- brief: str | None = Field(None, description="Natural language description of campaign requirements")
682
- brand_manifest: BrandManifestRef | None = Field(None, description="Brand information manifest providing brand context, assets, and product catalog. Can be provided inline or as a URL reference to a hosted manifest.")
683
- filters: dict[str, Any] | None = Field(None, description="Structured filters for product discovery")
684
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
685
-
686
-
687
- class GetSignalsRequest(BaseModel):
688
- """Request parameters for discovering signals based on description"""
689
-
690
- signal_spec: str = Field(description="Natural language description of the desired signals")
691
- deliver_to: dict[str, Any] = Field(description="Destination platforms where signals need to be activated")
692
- filters: dict[str, Any] | None = Field(None, description="Filters to refine results")
693
- max_results: int | None = Field(None, description="Maximum number of results to return")
694
- context: dict[str, Any] | None = Field(None, 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.")
695
-
696
-
697
- class ListAuthorizedPropertiesRequest(BaseModel):
698
- """Request parameters for discovering which publishers this agent is authorized to represent"""
699
-
700
- publisher_domains: list[str] | None = Field(None, description="Filter to specific publisher domains (optional). If omitted, returns all publishers this agent represents.")
701
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
702
-
703
-
704
- class ListCreativeFormatsRequest(BaseModel):
705
- """Request parameters for discovering creative formats provided by this creative agent"""
706
-
707
- format_ids: list[FormatId] | None = Field(None, description="Return only these specific format IDs")
708
- type: Literal["audio", "video", "display", "dooh"] | None = Field(None, description="Filter by format type (technical categories with distinct requirements)")
709
- asset_types: list[Literal["image", "video", "audio", "text", "html", "javascript", "url"]] | None = Field(None, 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.")
710
- max_width: int | None = Field(None, description="Maximum width in pixels (inclusive). Returns formats with width <= this value. Omit for responsive/fluid formats.")
711
- max_height: int | None = Field(None, description="Maximum height in pixels (inclusive). Returns formats with height <= this value. Omit for responsive/fluid formats.")
712
- min_width: int | None = Field(None, description="Minimum width in pixels (inclusive). Returns formats with width >= this value.")
713
- min_height: int | None = Field(None, description="Minimum height in pixels (inclusive). Returns formats with height >= this value.")
714
- is_responsive: bool | None = Field(None, description="Filter for responsive formats that adapt to container size. When true, returns formats without fixed dimensions.")
715
- name_search: str | None = Field(None, description="Search for formats by name (case-insensitive partial match)")
716
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
717
-
718
-
719
- class ListCreativesRequest(BaseModel):
720
- """Request parameters for querying creative assets from the centralized library with filtering, sorting, and pagination"""
721
-
722
- filters: dict[str, Any] | None = Field(None, description="Filter criteria for querying creatives")
723
- sort: dict[str, Any] | None = Field(None, description="Sorting parameters")
724
- pagination: dict[str, Any] | None = Field(None, description="Pagination parameters")
725
- include_assignments: bool | None = Field(None, description="Include package assignment information in response")
726
- include_performance: bool | None = Field(None, description="Include aggregated performance metrics in response")
727
- include_sub_assets: bool | None = Field(None, description="Include sub-assets (for carousel/native formats) in response")
728
- fields: list[Literal["creative_id", "name", "format", "status", "created_date", "updated_date", "tags", "assignments", "performance", "sub_assets"]] | None = Field(None, description="Specific fields to include in response (omit for all fields)")
729
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
730
-
731
-
732
- class PackageRequest(BaseModel):
733
- """Package configuration for media buy creation"""
734
-
735
- buyer_ref: str = Field(description="Buyer's reference identifier for this package")
736
- product_id: str = Field(description="Product ID for this package")
737
- format_ids: list[FormatId] | None = Field(None, description="Array of format IDs that will be used for this package - must be supported by the product. If omitted, defaults to all formats supported by the product.")
738
- budget: float = Field(description="Budget allocation for this package in the media buy's currency")
739
- pacing: Pacing | None = None
740
- pricing_option_id: str = Field(description="ID of the selected pricing option from the product's pricing_options array")
741
- bid_price: float | None = Field(None, description="Bid price for auction-based CPM pricing (required if using cpm-auction-option)")
742
- targeting_overlay: Targeting | None = None
743
- creative_ids: list[str] | None = Field(None, description="Creative IDs to assign to this package at creation time (references existing library creatives)")
744
- creatives: list[CreativeAsset] | None = Field(None, description="Full creative objects to upload and assign to this package at creation time (alternative to creative_ids - creatives will be added to library). Supports both static and generative creatives.")
745
-
746
-
747
- class ProvidePerformanceFeedbackRequest(BaseModel):
748
- """Request payload for provide_performance_feedback task"""
749
-
750
- media_buy_id: str = Field(description="Publisher's media buy identifier")
751
- measurement_period: dict[str, Any] = Field(description="Time period for performance measurement")
752
- performance_index: float = Field(description="Normalized performance score (0.0 = no value, 1.0 = expected, >1.0 = above expected)")
753
- package_id: str | None = Field(None, description="Specific package within the media buy (if feedback is package-specific)")
754
- creative_id: str | None = Field(None, description="Specific creative asset (if feedback is creative-specific)")
755
- metric_type: Literal["overall_performance", "conversion_rate", "brand_lift", "click_through_rate", "completion_rate", "viewability", "brand_safety", "cost_efficiency"] | None = Field(None, description="The business metric being measured")
756
- feedback_source: Literal["buyer_attribution", "third_party_measurement", "platform_analytics", "verification_partner"] | None = Field(None, description="Source of the performance data")
757
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context included in the request payload. Agentsmust echo this value back unchanged in responses and webhooks. Use for UI/session hints, correlation tokens, or tracking metadata.")
758
-
759
-
760
- class SyncCreativesRequest(BaseModel):
761
- """Request parameters for syncing creative assets with upsert semantics - supports bulk operations, patch updates, and assignment management"""
762
-
763
- creatives: list[CreativeAsset] = Field(description="Array of creative assets to sync (create or update)")
764
- patch: bool | None = Field(None, description="When true, only provided fields are updated (partial update). When false, entire creative is replaced (full upsert).")
765
- assignments: dict[str, Any] | None = Field(None, description="Optional bulk assignment of creatives to packages")
766
- delete_missing: bool | None = Field(None, description="When true, creatives not included in this sync will be archived. Use with caution for full library replacement.")
767
- dry_run: bool | None = Field(None, description="When true, preview changes without applying them. Returns what would be created/updated/deleted.")
768
- validation_mode: Literal["strict", "lenient"] | None = Field(None, description="Validation strictness. 'strict' fails entire sync on any validation error. 'lenient' processes valid creatives and reports errors.")
769
- push_notification_config: PushNotificationConfig | None = Field(None, description="Optional webhook configuration for async sync notifications. Publisher will send webhook when sync completes if operation takes longer than immediate response time (typically for large bulk operations or manual approval/HITL).")
770
- context: dict[str, Any] | None = Field(None, 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.")
771
-
772
-
773
- class TasksGetRequest(BaseModel):
774
- """Request parameters for retrieving a specific task by ID with optional conversation history across all AdCP domains"""
775
-
776
- task_id: str = Field(description="Unique identifier of the task to retrieve")
777
- include_history: bool | None = Field(None, description="Include full conversation history for this task (may increase response size)")
778
- context: dict[str, Any] | None = Field(None, 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.")
779
-
780
-
781
- class TasksListRequest(BaseModel):
782
- """Request parameters for listing and filtering async tasks across all AdCP domains with state reconciliation capabilities"""
783
-
784
- filters: dict[str, Any] | None = Field(None, description="Filter criteria for querying tasks")
785
- sort: dict[str, Any] | None = Field(None, description="Sorting parameters")
786
- pagination: dict[str, Any] | None = Field(None, description="Pagination parameters")
787
- include_history: bool | None = Field(None, description="Include full conversation history for each task (may significantly increase response size)")
788
- context: dict[str, Any] | None = Field(None, 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.")
789
-
790
-
791
- class UpdateMediaBuyRequest(BaseModel):
792
- """Request parameters for updating campaign and package settings"""
793
-
794
- media_buy_id: str | None = Field(None, description="Publisher's ID of the media buy to update")
795
- buyer_ref: str | None = Field(None, description="Buyer's reference for the media buy to update")
796
- active: bool | None = Field(None, description="Pause/resume the entire media buy")
797
- start_time: StartTiming | None = None
798
- end_time: str | None = Field(None, description="New end date/time in ISO 8601 format")
799
- packages: list[dict[str, Any]] | None = Field(None, description="Package-specific updates")
800
- push_notification_config: PushNotificationConfig | None = Field(None, description="Optional webhook configuration for async update notifications. Publisher will send webhook when update completes if operation takes longer than immediate response time.")
801
- context: dict[str, Any] | None = Field(None, 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.")
802
-
803
-
804
- # 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.
805
-
806
- class BuildCreativeResponseVariant1(BaseModel):
807
- """Success response - creative manifest generated successfully"""
808
-
809
- model_config = ConfigDict(extra="forbid")
810
-
811
- creative_manifest: CreativeManifest = Field(description="The generated or transformed creative manifest")
812
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
813
-
814
-
815
- class BuildCreativeResponseVariant2(BaseModel):
816
- """Error response - creative generation failed"""
817
-
818
- model_config = ConfigDict(extra="forbid")
819
-
820
- errors: list[Error] = Field(description="Array of errors explaining why creative generation failed")
821
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
822
-
823
-
824
- # Union type for Build Creative Response
825
- BuildCreativeResponse = BuildCreativeResponseVariant1 | BuildCreativeResponseVariant2
826
-
827
-
828
- class GetMediaBuyDeliveryResponse(BaseModel):
829
- """Response payload for get_media_buy_delivery task"""
830
-
831
- notification_type: Literal["scheduled", "final", "delayed", "adjusted"] | None = Field(None, description="Type of webhook notification (only present in webhook deliveries): scheduled = regular periodic update, final = campaign completed, delayed = data not yet available, adjusted = resending period with updated data")
832
- partial_data: bool | None = Field(None, description="Indicates if any media buys in this webhook have missing/delayed data (only present in webhook deliveries)")
833
- unavailable_count: int | None = Field(None, description="Number of media buys with reporting_delayed or failed status (only present in webhook deliveries when partial_data is true)")
834
- sequence_number: int | None = Field(None, description="Sequential notification number (only present in webhook deliveries, starts at 1)")
835
- next_expected_at: str | None = Field(None, description="ISO 8601 timestamp for next expected notification (only present in webhook deliveries when notification_type is not 'final')")
836
- reporting_period: dict[str, Any] = Field(description="Date range for the report. All periods use UTC timezone.")
837
- currency: str = Field(description="ISO 4217 currency code")
838
- aggregated_totals: dict[str, Any] | None = Field(None, description="Combined metrics across all returned media buys. Only included in API responses (get_media_buy_delivery), not in webhook notifications.")
839
- media_buy_deliveries: list[dict[str, Any]] = Field(description="Array of delivery data for media buys. When used in webhook notifications, may contain multiple media buys aggregated by publisher. When used in get_media_buy_delivery API responses, typically contains requested media buys.")
840
- errors: list[Error] | None = Field(None, description="Task-specific errors and warnings (e.g., missing delivery data, reporting platform issues)")
841
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
842
-
843
-
844
- class GetProductsResponse(BaseModel):
845
- """Response payload for get_products task"""
846
-
847
- products: list[Product] = Field(description="Array of matching products")
848
- errors: list[Error] | None = Field(None, description="Task-specific errors and warnings (e.g., product filtering issues)")
849
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
850
-
851
-
852
- class GetSignalsResponse(BaseModel):
853
- """Response payload for get_signals task"""
854
-
855
- signals: list[dict[str, Any]] = Field(description="Array of matching signals")
856
- errors: list[Error] | None = Field(None, description="Task-specific errors and warnings (e.g., signal discovery or pricing issues)")
857
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
858
-
859
-
860
- class ListAuthorizedPropertiesResponse(BaseModel):
861
- """Response payload for list_authorized_properties task. Lists publisher domains and authorization scope (property_ids or property_tags). Buyers fetch actual property definitions from each publisher's canonical adagents.json file."""
862
-
863
- publisher_domains: list[str] = Field(description="Publisher domains this agent is authorized to represent. Buyers should fetch each publisher's adagents.json to see property definitions and verify this agent is in their authorized_agents list with authorization scope.")
864
- primary_channels: list[Channels] | None = Field(None, description="Primary advertising channels represented in this property portfolio. Helps buying agents quickly filter relevance.")
865
- primary_countries: list[str] | None = Field(None, description="Primary countries (ISO 3166-1 alpha-2 codes) where properties are concentrated. Helps buying agents quickly filter relevance.")
866
- portfolio_description: str | None = Field(None, description="Markdown-formatted description of the property portfolio, including inventory types, audience characteristics, and special features.")
867
- advertising_policies: str | None = Field(None, description="Publisher's advertising content policies, restrictions, and guidelines in natural language. May include prohibited categories, blocked advertisers, restricted tactics, brand safety requirements, or links to full policy documentation.")
868
- last_updated: str | None = Field(None, description="ISO 8601 timestamp of when the agent's publisher authorization list was last updated. Buyers can use this to determine if their cached publisher adagents.json files might be stale.")
869
- errors: list[Error] | None = Field(None, description="Task-specific errors and warnings (e.g., property availability issues)")
870
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
871
-
872
-
873
- class ListCreativeFormatsResponse(BaseModel):
874
- """Response payload for list_creative_formats task from creative agent - returns full format definitions"""
875
-
876
- formats: list[Format] = Field(description="Full format definitions for all formats this agent supports. Each format's authoritative source is indicated by its agent_url field.")
877
- creative_agents: list[dict[str, Any]] | None = Field(None, 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.")
878
- errors: list[Error] | None = Field(None, description="Task-specific errors and warnings")
879
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
880
-
881
-
882
- class ListCreativesResponse(BaseModel):
883
- """Response from creative library query with filtered results, metadata, and optional enriched data"""
884
-
885
- query_summary: dict[str, Any] = Field(description="Summary of the query that was executed")
886
- pagination: dict[str, Any] = Field(description="Pagination information for navigating results")
887
- creatives: list[dict[str, Any]] = Field(description="Array of creative assets matching the query")
888
- format_summary: dict[str, Any] | None = Field(None, description="Breakdown of creatives by format type")
889
- status_summary: dict[str, Any] | None = Field(None, description="Breakdown of creatives by status")
890
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
891
-
892
-
893
- # Response payload for provide_performance_feedback task. Returns either success confirmation OR error information, never both.
894
-
895
- class ProvidePerformanceFeedbackResponseVariant1(BaseModel):
896
- """Success response - feedback received and processed"""
897
-
898
- model_config = ConfigDict(extra="forbid")
899
-
900
- success: Literal[True] = Field(description="Whether the performance feedback was successfully received")
901
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
902
-
903
-
904
- class ProvidePerformanceFeedbackResponseVariant2(BaseModel):
905
- """Error response - feedback rejected or could not be processed"""
906
-
907
- model_config = ConfigDict(extra="forbid")
908
-
909
- errors: list[Error] = Field(description="Array of errors explaining why feedback was rejected (e.g., invalid measurement period, missing campaign data)")
910
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
911
-
912
-
913
- # Union type for Provide Performance Feedback Response
914
- ProvidePerformanceFeedbackResponse = ProvidePerformanceFeedbackResponseVariant1 | ProvidePerformanceFeedbackResponseVariant2
915
-
916
-
917
- class TasksGetResponse(BaseModel):
918
- """Response containing detailed information about a specific task including status and optional conversation history across all AdCP domains"""
919
-
920
- task_id: str = Field(description="Unique identifier for this task")
921
- task_type: TaskType = Field(description="Type of AdCP operation")
922
- domain: Literal["media-buy", "signals"] = Field(description="AdCP domain this task belongs to")
923
- status: TaskStatus = Field(description="Current task status")
924
- created_at: str = Field(description="When the task was initially created (ISO 8601)")
925
- updated_at: str = Field(description="When the task was last updated (ISO 8601)")
926
- completed_at: str | None = Field(None, description="When the task completed (ISO 8601, only for completed/failed/canceled tasks)")
927
- has_webhook: bool | None = Field(None, description="Whether this task has webhook configuration")
928
- progress: dict[str, Any] | None = Field(None, description="Progress information for long-running tasks")
929
- error: dict[str, Any] | None = Field(None, description="Error details for failed tasks")
930
- history: list[dict[str, Any]] | None = Field(None, description="Complete conversation history for this task (only included if include_history was true in request)")
931
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
932
-
933
-
934
- class TasksListResponse(BaseModel):
935
- """Response from task listing query with filtered results and state reconciliation data across all AdCP domains"""
936
-
937
- query_summary: dict[str, Any] = Field(description="Summary of the query that was executed")
938
- tasks: list[dict[str, Any]] = Field(description="Array of tasks matching the query criteria")
939
- pagination: dict[str, Any] = Field(description="Pagination information")
940
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
941
-
942
-
943
-
944
- # ============================================================================
945
- # CUSTOM IMPLEMENTATIONS (override type aliases from generator)
946
- # ============================================================================
947
- # The simple code generator produces type aliases (e.g., PreviewCreativeRequest = Any)
948
- # for complex schemas that use oneOf. We override them here with proper Pydantic classes
949
- # to maintain type safety and enable batch API support.
950
- # Note: All classes inherit from BaseModel (which is aliased to AdCPBaseModel for exclude_none).
951
-
952
-
953
- class FormatId(BaseModel):
954
- """Structured format identifier with agent URL and format name"""
955
-
956
- agent_url: str = Field(description="URL of the agent that defines this format (e.g., 'https://creatives.adcontextprotocol.org' for standard formats, or 'https://publisher.com/.well-known/adcp/sales' for custom formats)")
957
- id: str = Field(description="Format identifier within the agent's namespace (e.g., 'display_300x250', 'video_standard_30s')")
958
-
959
- @field_validator("id")
960
- @classmethod
961
- def validate_id_pattern(cls, v: str) -> str:
962
- """Validate format ID contains only alphanumeric characters, hyphens, and underscores."""
963
- if not re.match(r"^[a-zA-Z0-9_-]+$", v):
964
- raise ValueError(
965
- f"Invalid format ID: {v!r}. Must contain only alphanumeric characters, hyphens, and underscores"
966
- )
967
- return v
968
-
969
-
970
- class PreviewCreativeRequest(BaseModel):
971
- """Request to generate a preview of a creative manifest. Supports single or batch mode."""
972
-
973
- # Single mode fields
974
- format_id: FormatId | None = Field(default=None, description="Format identifier for rendering the preview (single mode)")
975
- creative_manifest: CreativeManifest | None = Field(default=None, description="Complete creative manifest with all required assets (single mode)")
976
- inputs: list[dict[str, Any]] | None = Field(default=None, description="Array of input sets for generating multiple preview variants")
977
- template_id: str | None = Field(default=None, description="Specific template ID for custom format rendering")
978
-
979
- # Batch mode field
980
- requests: list[dict[str, Any]] | None = Field(default=None, description="Array of preview requests for batch processing (1-50 items)")
981
-
982
- # Output format (applies to both modes)
983
- output_format: Literal["url", "html"] | None = Field(default="url", description="Output format: 'url' for iframe URLs, 'html' for direct embedding")
984
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
985
-
986
- class PreviewCreativeResponse(BaseModel):
987
- """Response containing preview links for one or more creatives. Format matches the request: single preview response for single requests, batch results for batch requests."""
988
-
989
- # Single mode fields
990
- previews: list[dict[str, Any]] | None = Field(default=None, description="Array of preview variants (single mode)")
991
- interactive_url: str | None = Field(default=None, description="Optional URL to interactive testing page (single mode)")
992
- expires_at: str | None = Field(default=None, description="ISO 8601 timestamp when preview links expire (single mode)")
993
-
994
- # Batch mode field
995
- results: list[dict[str, Any]] | None = Field(default=None, description="Array of preview results for batch processing")
996
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
997
-
998
-
999
- # ============================================================================
1000
- # ONEOF DISCRIMINATED UNIONS FOR RESPONSE TYPES
1001
- # ============================================================================
1002
- # These response types use oneOf semantics: success XOR error, never both.
1003
- # Implemented as Union types with distinct Success/Error variants.
1004
-
1005
-
1006
- class ActivateSignalSuccess(BaseModel):
1007
- """Successful signal activation response"""
1008
-
1009
- decisioning_platform_segment_id: str = Field(
1010
- description="The platform-specific ID to use once activated"
1011
- )
1012
- estimated_activation_duration_minutes: float | None = None
1013
- deployed_at: str | None = None
1014
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1015
-
1016
- class ActivateSignalError(BaseModel):
1017
- """Failed signal activation response"""
1018
-
1019
- errors: list[Error] = Field(description="Task-specific errors and warnings")
1020
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1021
-
1022
- # Override the generated ActivateSignalResponse type alias
1023
- ActivateSignalResponse = ActivateSignalSuccess | ActivateSignalError
1024
-
1025
-
1026
- class CreateMediaBuySuccess(BaseModel):
1027
- """Successful media buy creation response"""
1028
-
1029
- media_buy_id: str = Field(description="The unique ID for the media buy")
1030
- buyer_ref: str = Field(description="The buyer's reference ID for this media buy")
1031
- packages: list[Package] = Field(
1032
- description="Array of approved packages. Each package is ready for creative assignment."
1033
- )
1034
- creative_deadline: str | None = Field(
1035
- None,
1036
- description="ISO 8601 date when creatives must be provided for launch",
1037
- )
1038
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1039
-
1040
-
1041
- class CreateMediaBuyError(BaseModel):
1042
- """Failed media buy creation response"""
1043
-
1044
- errors: list[Error] = Field(description="Task-specific errors and warnings")
1045
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1046
-
1047
-
1048
- # Override the generated CreateMediaBuyResponse type alias
1049
- CreateMediaBuyResponse = CreateMediaBuySuccess | CreateMediaBuyError
1050
-
1051
-
1052
- class UpdateMediaBuySuccess(BaseModel):
1053
- """Successful media buy update response"""
1054
-
1055
- media_buy_id: str = Field(description="The unique ID for the media buy")
1056
- buyer_ref: str = Field(description="The buyer's reference ID for this media buy")
1057
- packages: list[Package] = Field(
1058
- description="Array of updated packages reflecting the changes"
1059
- )
1060
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1061
-
1062
-
1063
- class UpdateMediaBuyError(BaseModel):
1064
- """Failed media buy update response"""
1065
-
1066
- errors: list[Error] = Field(description="Task-specific errors and warnings")
1067
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1068
-
1069
- # Override the generated UpdateMediaBuyResponse type alias
1070
- UpdateMediaBuyResponse = UpdateMediaBuySuccess | UpdateMediaBuyError
1071
-
1072
-
1073
- class SyncCreativesSuccess(BaseModel):
1074
- """Successful creative sync response"""
1075
-
1076
- assignments: list[CreativeAssignment] = Field(
1077
- description="Array of creative assignments with updated status"
1078
- )
1079
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1080
-
1081
-
1082
- class SyncCreativesError(BaseModel):
1083
- """Failed creative sync response"""
1084
-
1085
- errors: list[Error] = Field(description="Task-specific errors and warnings")
1086
- context: dict[str, Any] | None = Field(None, description="Initiator-provided context echoed inside the task payload. Opaque metadata such as UI/session hints, correlation tokens, or tracking identifiers.")
1087
-
1088
- # Override the generated SyncCreativesResponse type alias
1089
- SyncCreativesResponse = SyncCreativesSuccess | SyncCreativesError
1090
-
1091
-
1092
- # Explicit exports for module interface
12
+ # Import all types from generated_poc modules
13
+ from adcp.types.generated_poc.activate_signal_request import ActivateSignalRequest
14
+ from adcp.types.generated_poc.activate_signal_response import (
15
+ ActivateSignalResponse,
16
+ ActivateSignalResponse1,
17
+ ActivateSignalResponse2,
18
+ )
19
+ from adcp.types.generated_poc.activation_key import ActivationKey1, ActivationKey2
20
+ from adcp.types.generated_poc.adagents import (
21
+ AuthorizedAgents,
22
+ AuthorizedAgents1,
23
+ AuthorizedAgents2,
24
+ AuthorizedAgents3,
25
+ AuthorizedSalesAgents,
26
+ Contact,
27
+ PropertyId,
28
+ PropertyTag,
29
+ PublisherProperties,
30
+ PublisherProperties1,
31
+ Tags,
32
+ )
33
+ from adcp.types.generated_poc.asset_type import (
34
+ AssetTypeSchema,
35
+ ContentLength,
36
+ Dimensions,
37
+ Duration,
38
+ FileSize,
39
+ Quality,
40
+ Requirements,
41
+ Type,
42
+ )
43
+ from adcp.types.generated_poc.audio_asset import AudioAsset
44
+ from adcp.types.generated_poc.brand_manifest import (
45
+ Asset,
46
+ Asset1,
47
+ AssetType,
48
+ BrandManifest1,
49
+ BrandManifest2,
50
+ Colors,
51
+ Disclaimer,
52
+ FeedFormat,
53
+ Fonts,
54
+ Logo,
55
+ Metadata,
56
+ ProductCatalog,
57
+ ProductCatalog1,
58
+ UpdateFrequency,
59
+ )
60
+ from adcp.types.generated_poc.brand_manifest_ref import BrandManifest, BrandManifestReference
61
+ from adcp.types.generated_poc.build_creative_request import BuildCreativeRequest
62
+ from adcp.types.generated_poc.build_creative_response import (
63
+ BuildCreativeResponse,
64
+ BuildCreativeResponse1,
65
+ BuildCreativeResponse2,
66
+ )
67
+ from adcp.types.generated_poc.channels import AdvertisingChannels
68
+ from adcp.types.generated_poc.cpc_option import CpcPricingOption
69
+ from adcp.types.generated_poc.cpcv_option import CpcvPricingOption
70
+ from adcp.types.generated_poc.cpm_auction_option import CpmAuctionPricingOption, PriceGuidance
71
+ from adcp.types.generated_poc.cpm_fixed_option import CpmFixedRatePricingOption
72
+ from adcp.types.generated_poc.cpp_option import CppPricingOption, Parameters
73
+ from adcp.types.generated_poc.cpv_option import CpvPricingOption, ViewThreshold, ViewThreshold1
74
+ from adcp.types.generated_poc.create_media_buy_request import (
75
+ CreateMediaBuyRequest,
76
+ ReportingFrequency,
77
+ ReportingWebhook,
78
+ RequestedMetric,
79
+ )
80
+ from adcp.types.generated_poc.create_media_buy_response import (
81
+ CreateMediaBuyResponse,
82
+ CreateMediaBuyResponse1,
83
+ CreateMediaBuyResponse2,
84
+ Package,
85
+ )
86
+ from adcp.types.generated_poc.creative_asset import CreativeAsset, Input
87
+ from adcp.types.generated_poc.creative_assignment import CreativeAssignment
88
+ from adcp.types.generated_poc.creative_manifest import CreativeManifest
89
+ from adcp.types.generated_poc.creative_policy import CoBranding, CreativePolicy, LandingPage
90
+ from adcp.types.generated_poc.creative_status import CreativeStatus
91
+ from adcp.types.generated_poc.css_asset import CssAsset
92
+ from adcp.types.generated_poc.daast_asset import (
93
+ DaastAsset1,
94
+ DaastAsset2,
95
+ DaastVersion,
96
+ TrackingEvent,
97
+ )
98
+ from adcp.types.generated_poc.delivery_metrics import (
99
+ DeliveryMetrics,
100
+ DoohMetrics,
101
+ QuartileData,
102
+ VenueBreakdownItem,
103
+ )
104
+ from adcp.types.generated_poc.delivery_type import DeliveryType
105
+ from adcp.types.generated_poc.deployment import Deployment1, Deployment2
106
+ from adcp.types.generated_poc.destination import Destination1, Destination2
107
+ from adcp.types.generated_poc.error import Error
108
+ from adcp.types.generated_poc.flat_rate_option import FlatRatePricingOption
109
+ from adcp.types.generated_poc.format import (
110
+ AssetsRequired,
111
+ AssetsRequired1,
112
+ Format,
113
+ FormatCard,
114
+ FormatCardDetailed,
115
+ Render,
116
+ Responsive,
117
+ Unit,
118
+ )
119
+ from adcp.types.generated_poc.format_id import FormatId
120
+ from adcp.types.generated_poc.frequency_cap import FrequencyCap
121
+ from adcp.types.generated_poc.frequency_cap_scope import FrequencyCapScope
122
+ from adcp.types.generated_poc.get_media_buy_delivery_request import (
123
+ GetMediaBuyDeliveryRequest,
124
+ StatusFilter,
125
+ StatusFilterEnum,
126
+ )
127
+ from adcp.types.generated_poc.get_media_buy_delivery_response import (
128
+ AggregatedTotals,
129
+ ByPackageItem,
130
+ DailyBreakdownItem,
131
+ GetMediaBuyDeliveryResponse,
132
+ MediaBuyDelivery,
133
+ NotificationType,
134
+ ReportingPeriod,
135
+ Status,
136
+ Totals,
137
+ )
138
+ from adcp.types.generated_poc.get_products_request import Filters, FormatType, GetProductsRequest
139
+ from adcp.types.generated_poc.get_products_response import GetProductsResponse
140
+ from adcp.types.generated_poc.get_signals_request import (
141
+ CatalogType,
142
+ Country,
143
+ DeliverTo,
144
+ GetSignalsRequest,
145
+ )
146
+ from adcp.types.generated_poc.get_signals_response import (
147
+ GetSignalsResponse,
148
+ Pricing,
149
+ Signal,
150
+ SignalType,
151
+ )
152
+ from adcp.types.generated_poc.html_asset import HtmlAsset
153
+ from adcp.types.generated_poc.identifier_types import PropertyIdentifierTypes
154
+ from adcp.types.generated_poc.image_asset import ImageAsset
155
+ from adcp.types.generated_poc.index import AdcpAssetTypeRegistry
156
+ from adcp.types.generated_poc.javascript_asset import JavascriptAsset, ModuleType
157
+ from adcp.types.generated_poc.list_authorized_properties_request import (
158
+ ListAuthorizedPropertiesRequest,
159
+ PublisherDomain,
160
+ )
161
+ from adcp.types.generated_poc.list_authorized_properties_response import (
162
+ ListAuthorizedPropertiesResponse,
163
+ PrimaryCountry,
164
+ )
165
+ from adcp.types.generated_poc.list_creative_formats_request import ListCreativeFormatsRequest
166
+ from adcp.types.generated_poc.list_creative_formats_response import (
167
+ Capability,
168
+ CreativeAgent,
169
+ ListCreativeFormatsResponse,
170
+ )
171
+ from adcp.types.generated_poc.list_creatives_request import (
172
+ Direction,
173
+ Field1,
174
+ FieldModel,
175
+ ListCreativesRequest,
176
+ Pagination,
177
+ Sort,
178
+ )
179
+ from adcp.types.generated_poc.list_creatives_response import (
180
+ AssignedPackage,
181
+ Assignments,
182
+ Creative,
183
+ ListCreativesResponse,
184
+ Performance,
185
+ QuerySummary,
186
+ SortApplied,
187
+ StatusSummary,
188
+ )
189
+ from adcp.types.generated_poc.markdown_asset import MarkdownAsset, MarkdownFlavor
190
+ from adcp.types.generated_poc.measurement import Measurement
191
+ from adcp.types.generated_poc.media_buy import MediaBuy
192
+ from adcp.types.generated_poc.media_buy_status import MediaBuyStatus
193
+ from adcp.types.generated_poc.pacing import Pacing
194
+ from adcp.types.generated_poc.package_request import PackageRequest
195
+ from adcp.types.generated_poc.package_status import PackageStatus
196
+ from adcp.types.generated_poc.performance_feedback import (
197
+ FeedbackSource,
198
+ MeasurementPeriod,
199
+ MetricType,
200
+ PerformanceFeedback,
201
+ )
202
+ from adcp.types.generated_poc.placement import Placement
203
+ from adcp.types.generated_poc.preview_creative_request import (
204
+ Input2,
205
+ OutputFormat,
206
+ PreviewCreativeRequest,
207
+ PreviewCreativeRequest1,
208
+ PreviewCreativeRequest2,
209
+ Request,
210
+ )
211
+ from adcp.types.generated_poc.preview_creative_response import (
212
+ Input4,
213
+ Preview,
214
+ Preview1,
215
+ Preview2,
216
+ PreviewCreativeResponse,
217
+ PreviewCreativeResponse1,
218
+ PreviewCreativeResponse2,
219
+ Response,
220
+ Response1,
221
+ Results,
222
+ Results1,
223
+ )
224
+ from adcp.types.generated_poc.preview_render import (
225
+ Embedding,
226
+ PreviewRender,
227
+ PreviewRender1,
228
+ PreviewRender2,
229
+ PreviewRender3,
230
+ )
231
+ from adcp.types.generated_poc.pricing_model import PricingModel
232
+ from adcp.types.generated_poc.pricing_option import (
233
+ CpcOption,
234
+ CpcvOption,
235
+ CpmAuctionOption,
236
+ CpmFixedOption,
237
+ CppOption,
238
+ CpvOption,
239
+ FlatRateOption,
240
+ Parameters1,
241
+ Parameters2,
242
+ PriceGuidance1,
243
+ PricingOption,
244
+ VcpmAuctionOption,
245
+ VcpmFixedOption,
246
+ )
247
+ from adcp.types.generated_poc.product import (
248
+ DeliveryMeasurement,
249
+ Product,
250
+ ProductCard,
251
+ ProductCardDetailed,
252
+ )
253
+ from adcp.types.generated_poc.promoted_offerings import AssetSelectors, Offering, PromotedOfferings
254
+ from adcp.types.generated_poc.promoted_products import PromotedProducts
255
+ from adcp.types.generated_poc.property import Identifier, Property, PropertyType, Tag
256
+ from adcp.types.generated_poc.protocol_envelope import ProtocolEnvelope
257
+ from adcp.types.generated_poc.provide_performance_feedback_request import (
258
+ ProvidePerformanceFeedbackRequest,
259
+ )
260
+ from adcp.types.generated_poc.provide_performance_feedback_response import (
261
+ ProvidePerformanceFeedbackResponse,
262
+ ProvidePerformanceFeedbackResponse1,
263
+ ProvidePerformanceFeedbackResponse2,
264
+ )
265
+ from adcp.types.generated_poc.publisher_identifier_types import PublisherIdentifierTypes
266
+ from adcp.types.generated_poc.push_notification_config import (
267
+ Authentication,
268
+ PushNotificationConfig,
269
+ Scheme,
270
+ )
271
+ from adcp.types.generated_poc.reporting_capabilities import (
272
+ AvailableMetric,
273
+ AvailableReportingFrequency,
274
+ ReportingCapabilities,
275
+ )
276
+ from adcp.types.generated_poc.response import ProtocolResponse
277
+ from adcp.types.generated_poc.standard_format_ids import StandardFormatIds
278
+ from adcp.types.generated_poc.start_timing import StartTiming
279
+ from adcp.types.generated_poc.sub_asset import SubAsset1, SubAsset2
280
+ from adcp.types.generated_poc.sync_creatives_request import SyncCreativesRequest, ValidationMode
281
+ from adcp.types.generated_poc.sync_creatives_response import (
282
+ Action,
283
+ SyncCreativesResponse,
284
+ SyncCreativesResponse1,
285
+ SyncCreativesResponse2,
286
+ )
287
+ from adcp.types.generated_poc.targeting import GeoCountryAnyOfItem, TargetingOverlay
288
+ from adcp.types.generated_poc.task_status import TaskStatus
289
+ from adcp.types.generated_poc.task_type import TaskType
290
+ from adcp.types.generated_poc.tasks_get_request import TasksGetRequest
291
+ from adcp.types.generated_poc.tasks_get_response import (
292
+ Details,
293
+ Domain,
294
+ HistoryItem,
295
+ Progress,
296
+ TasksGetResponse,
297
+ )
298
+ from adcp.types.generated_poc.tasks_list_request import TasksListRequest
299
+ from adcp.types.generated_poc.tasks_list_response import DomainBreakdown, Task, TasksListResponse
300
+ from adcp.types.generated_poc.text_asset import TextAsset
301
+ from adcp.types.generated_poc.update_media_buy_request import (
302
+ Packages,
303
+ Packages1,
304
+ Packages2,
305
+ Packages3,
306
+ UpdateMediaBuyRequest,
307
+ UpdateMediaBuyRequest1,
308
+ UpdateMediaBuyRequest2,
309
+ )
310
+ from adcp.types.generated_poc.update_media_buy_response import (
311
+ AffectedPackage,
312
+ UpdateMediaBuyResponse,
313
+ UpdateMediaBuyResponse1,
314
+ UpdateMediaBuyResponse2,
315
+ )
316
+ from adcp.types.generated_poc.url_asset import UrlAsset, UrlType
317
+ from adcp.types.generated_poc.vast_asset import VastAsset1, VastAsset2, VastVersion
318
+ from adcp.types.generated_poc.vcpm_auction_option import VcpmAuctionPricingOption
319
+ from adcp.types.generated_poc.vcpm_fixed_option import VcpmFixedRatePricingOption
320
+ from adcp.types.generated_poc.video_asset import VideoAsset
321
+ from adcp.types.generated_poc.webhook_asset import (
322
+ Method,
323
+ Method1,
324
+ ResponseType,
325
+ Security,
326
+ WebhookAsset,
327
+ )
328
+ from adcp.types.generated_poc.webhook_payload import WebhookPayload
329
+
330
+ # Backward compatibility aliases for renamed types
331
+ BrandManifestRef = BrandManifestReference
332
+ Channels = AdvertisingChannels
333
+
334
+ # Explicit exports
1093
335
  __all__ = [
1094
- "ActivateSignalError",
336
+ "Action",
1095
337
  "ActivateSignalRequest",
1096
338
  "ActivateSignalResponse",
1097
- "ActivateSignalSuccess",
1098
- "ActivationKey",
1099
- "AgentDeployment",
1100
- "AgentDestination",
1101
- "BothPreviewRender",
339
+ "ActivateSignalResponse1",
340
+ "ActivateSignalResponse2",
341
+ "ActivationKey1",
342
+ "ActivationKey2",
343
+ "AdcpAssetTypeRegistry",
344
+ "AdvertisingChannels",
345
+ "AffectedPackage",
346
+ "AggregatedTotals",
347
+ "Asset",
348
+ "Asset1",
349
+ "AssetSelectors",
350
+ "AssetType",
351
+ "AssetTypeSchema",
352
+ "AssetsRequired",
353
+ "AssetsRequired1",
354
+ "AssignedPackage",
355
+ "Assignments",
356
+ "AudioAsset",
357
+ "Authentication",
358
+ "AuthorizedAgents",
359
+ "AuthorizedAgents1",
360
+ "AuthorizedAgents2",
361
+ "AuthorizedAgents3",
362
+ "AuthorizedSalesAgents",
363
+ "AvailableMetric",
364
+ "AvailableReportingFrequency",
1102
365
  "BrandManifest",
366
+ "BrandManifest1",
367
+ "BrandManifest2",
1103
368
  "BrandManifestRef",
1104
- "BrandManifestRefVariant1",
1105
- "BrandManifestRefVariant2",
369
+ "BrandManifestReference",
1106
370
  "BuildCreativeRequest",
1107
371
  "BuildCreativeResponse",
1108
- "BuildCreativeResponseVariant1",
1109
- "BuildCreativeResponseVariant2",
372
+ "BuildCreativeResponse1",
373
+ "BuildCreativeResponse2",
374
+ "ByPackageItem",
375
+ "Capability",
376
+ "CatalogType",
1110
377
  "Channels",
1111
- "CreateMediaBuyError",
378
+ "CoBranding",
379
+ "Colors",
380
+ "Contact",
381
+ "ContentLength",
382
+ "Country",
383
+ "CpcOption",
384
+ "CpcPricingOption",
385
+ "CpcvOption",
386
+ "CpcvPricingOption",
387
+ "CpmAuctionOption",
388
+ "CpmAuctionPricingOption",
389
+ "CpmFixedOption",
390
+ "CpmFixedRatePricingOption",
391
+ "CppOption",
392
+ "CppPricingOption",
393
+ "CpvOption",
394
+ "CpvPricingOption",
1112
395
  "CreateMediaBuyRequest",
1113
396
  "CreateMediaBuyResponse",
1114
- "CreateMediaBuySuccess",
397
+ "CreateMediaBuyResponse1",
398
+ "CreateMediaBuyResponse2",
399
+ "Creative",
400
+ "CreativeAgent",
1115
401
  "CreativeAsset",
1116
402
  "CreativeAssignment",
1117
403
  "CreativeManifest",
1118
404
  "CreativePolicy",
1119
- "DaastAsset",
405
+ "CreativeStatus",
406
+ "CssAsset",
407
+ "DaastAsset1",
408
+ "DaastAsset2",
409
+ "DaastVersion",
410
+ "DailyBreakdownItem",
411
+ "DeliverTo",
412
+ "DeliveryMeasurement",
1120
413
  "DeliveryMetrics",
1121
414
  "DeliveryType",
1122
- "Deployment",
1123
- "Destination",
415
+ "Deployment1",
416
+ "Deployment2",
417
+ "Destination1",
418
+ "Destination2",
419
+ "Details",
420
+ "Dimensions",
421
+ "Direction",
422
+ "Disclaimer",
423
+ "Domain",
424
+ "DomainBreakdown",
425
+ "DoohMetrics",
426
+ "Duration",
427
+ "Embedding",
1124
428
  "Error",
429
+ "FeedFormat",
430
+ "FeedbackSource",
431
+ "Field1",
432
+ "FieldModel",
433
+ "FileSize",
434
+ "Filters",
435
+ "FlatRateOption",
436
+ "FlatRatePricingOption",
437
+ "Fonts",
1125
438
  "Format",
439
+ "FormatCard",
440
+ "FormatCardDetailed",
1126
441
  "FormatId",
442
+ "FormatType",
1127
443
  "FrequencyCap",
444
+ "FrequencyCapScope",
445
+ "GeoCountryAnyOfItem",
1128
446
  "GetMediaBuyDeliveryRequest",
1129
447
  "GetMediaBuyDeliveryResponse",
1130
448
  "GetProductsRequest",
1131
449
  "GetProductsResponse",
1132
450
  "GetSignalsRequest",
1133
451
  "GetSignalsResponse",
1134
- "HtmlPreviewRender",
1135
- "InlineDaastAsset",
1136
- "InlineVastAsset",
1137
- "Key_valueActivationKey",
452
+ "HistoryItem",
453
+ "HtmlAsset",
454
+ "Identifier",
455
+ "ImageAsset",
456
+ "Input",
457
+ "Input2",
458
+ "Input4",
459
+ "JavascriptAsset",
460
+ "LandingPage",
1138
461
  "ListAuthorizedPropertiesRequest",
1139
462
  "ListAuthorizedPropertiesResponse",
1140
463
  "ListCreativeFormatsRequest",
1141
464
  "ListCreativeFormatsResponse",
1142
465
  "ListCreativesRequest",
1143
466
  "ListCreativesResponse",
467
+ "Logo",
468
+ "MarkdownAsset",
469
+ "MarkdownFlavor",
1144
470
  "Measurement",
471
+ "MeasurementPeriod",
1145
472
  "MediaBuy",
473
+ "MediaBuyDelivery",
1146
474
  "MediaBuyStatus",
1147
- "MediaSubAsset",
475
+ "Metadata",
476
+ "Method",
477
+ "Method1",
478
+ "MetricType",
479
+ "ModuleType",
480
+ "NotificationType",
481
+ "Offering",
482
+ "OutputFormat",
1148
483
  "Pacing",
1149
484
  "Package",
1150
485
  "PackageRequest",
1151
486
  "PackageStatus",
487
+ "Packages",
488
+ "Packages1",
489
+ "Packages2",
490
+ "Packages3",
491
+ "Pagination",
492
+ "Parameters",
493
+ "Parameters1",
494
+ "Parameters2",
495
+ "Performance",
1152
496
  "PerformanceFeedback",
1153
497
  "Placement",
1154
- "PlatformDeployment",
1155
- "PlatformDestination",
498
+ "Preview",
499
+ "Preview1",
500
+ "Preview2",
1156
501
  "PreviewCreativeRequest",
502
+ "PreviewCreativeRequest1",
503
+ "PreviewCreativeRequest2",
1157
504
  "PreviewCreativeResponse",
505
+ "PreviewCreativeResponse1",
506
+ "PreviewCreativeResponse2",
1158
507
  "PreviewRender",
508
+ "PreviewRender1",
509
+ "PreviewRender2",
510
+ "PreviewRender3",
511
+ "PriceGuidance",
512
+ "PriceGuidance1",
513
+ "Pricing",
1159
514
  "PricingModel",
1160
515
  "PricingOption",
1161
- "PricingOptionVariant1",
1162
- "PricingOptionVariant2",
1163
- "PricingOptionVariant3",
1164
- "PricingOptionVariant4",
1165
- "PricingOptionVariant5",
1166
- "PricingOptionVariant6",
1167
- "PricingOptionVariant7",
1168
- "PricingOptionVariant8",
1169
- "PricingOptionVariant9",
516
+ "PrimaryCountry",
1170
517
  "Product",
518
+ "ProductCard",
519
+ "ProductCardDetailed",
520
+ "ProductCatalog",
521
+ "ProductCatalog1",
522
+ "Progress",
523
+ "PromotedOfferings",
1171
524
  "PromotedProducts",
1172
525
  "Property",
526
+ "PropertyId",
527
+ "PropertyIdentifierTypes",
528
+ "PropertyTag",
529
+ "PropertyType",
1173
530
  "ProtocolEnvelope",
531
+ "ProtocolResponse",
1174
532
  "ProvidePerformanceFeedbackRequest",
1175
533
  "ProvidePerformanceFeedbackResponse",
1176
- "ProvidePerformanceFeedbackResponseVariant1",
1177
- "ProvidePerformanceFeedbackResponseVariant2",
534
+ "ProvidePerformanceFeedbackResponse1",
535
+ "ProvidePerformanceFeedbackResponse2",
536
+ "PublisherDomain",
537
+ "PublisherIdentifierTypes",
538
+ "PublisherProperties",
539
+ "PublisherProperties1",
1178
540
  "PushNotificationConfig",
541
+ "Quality",
542
+ "QuartileData",
543
+ "QuerySummary",
544
+ "Render",
1179
545
  "ReportingCapabilities",
546
+ "ReportingFrequency",
547
+ "ReportingPeriod",
548
+ "ReportingWebhook",
549
+ "Request",
550
+ "RequestedMetric",
551
+ "Requirements",
1180
552
  "Response",
1181
- "Segment_idActivationKey",
553
+ "Response1",
554
+ "ResponseType",
555
+ "Responsive",
556
+ "Results",
557
+ "Results1",
558
+ "Scheme",
559
+ "Security",
560
+ "Signal",
561
+ "SignalType",
562
+ "Sort",
563
+ "SortApplied",
1182
564
  "StandardFormatIds",
1183
565
  "StartTiming",
1184
- "StartTimingVariant1",
1185
- "StartTimingVariant2",
1186
- "SubAsset",
1187
- "SyncCreativesError",
566
+ "Status",
567
+ "StatusFilter",
568
+ "StatusFilterEnum",
569
+ "StatusSummary",
570
+ "SubAsset1",
571
+ "SubAsset2",
1188
572
  "SyncCreativesRequest",
1189
573
  "SyncCreativesResponse",
1190
- "SyncCreativesSuccess",
1191
- "Targeting",
574
+ "SyncCreativesResponse1",
575
+ "SyncCreativesResponse2",
576
+ "Tag",
577
+ "Tags",
578
+ "TargetingOverlay",
579
+ "Task",
1192
580
  "TaskStatus",
1193
581
  "TaskType",
1194
582
  "TasksGetRequest",
1195
583
  "TasksGetResponse",
1196
584
  "TasksListRequest",
1197
585
  "TasksListResponse",
1198
- "TextSubAsset",
1199
- "UpdateMediaBuyError",
586
+ "TextAsset",
587
+ "Totals",
588
+ "TrackingEvent",
589
+ "Type",
590
+ "Unit",
591
+ "UpdateFrequency",
1200
592
  "UpdateMediaBuyRequest",
593
+ "UpdateMediaBuyRequest1",
594
+ "UpdateMediaBuyRequest2",
1201
595
  "UpdateMediaBuyResponse",
1202
- "UpdateMediaBuySuccess",
1203
- "UrlDaastAsset",
1204
- "UrlPreviewRender",
1205
- "UrlVastAsset",
1206
- "VastAsset",
596
+ "UpdateMediaBuyResponse1",
597
+ "UpdateMediaBuyResponse2",
598
+ "UrlAsset",
599
+ "UrlType",
600
+ "ValidationMode",
601
+ "VastAsset1",
602
+ "VastAsset2",
603
+ "VastVersion",
604
+ "VcpmAuctionOption",
605
+ "VcpmAuctionPricingOption",
606
+ "VcpmFixedOption",
607
+ "VcpmFixedRatePricingOption",
608
+ "VenueBreakdownItem",
609
+ "VideoAsset",
610
+ "ViewThreshold",
611
+ "ViewThreshold1",
612
+ "WebhookAsset",
1207
613
  "WebhookPayload",
1208
614
  ]